iOS開發(fā)之自定義導航欄返回按鈕右滑返回手勢失效的解決

本文簡介

見題知意 不再加以解釋

我相信針對每一個iOS開發(fā)者來說~除了根視圖控制器外~所有的界面通過導航欄push過去的界面都是可以通過右滑來返回上一個界面~其實~在很多應用和APP中~用戶已經(jīng)習慣了這個功能~然而~作為開發(fā)者的我們~也并沒有為此做些什么~因為我們在創(chuàng)建項目時~蘋果公司已經(jīng)為我們都做好了~那么~我們這期就來聊一聊這系統(tǒng)自帶的右滑方法以及如何修改和攔截這個不被重視的方法~

什么時候會被攔截

當我們使用代碼或者用storyboard來創(chuàng)建一個新的控制器的時候~我們很少注意導航欄的leftItem~因為正常情況下~push到下一個界面的leftItem就是上一個界面的self.title~并且它也就是一個返回的功能~所以~我們很少去在意這些~但當我們有些需求~需要自定義leftItem的時候~那么問題就來了~

問題一:怎么自定義leftItem

問題二:為什么系統(tǒng)自帶的右滑返回手勢失效

問題三:怎么解決這個失效問題

1.怎么自定義leftItem

其實~這個東西嘛~說簡單也是很簡單的~因為~我們很明確的知道~左導航欄就一個功能~那就是返回上一個界面~很顯然~是需要用戶交互的~必用按鈕~

說多了都是廢話~直接上代碼~

//自定義一個按鈕

UIButton? *leftBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [leftBtn setTitle:@"返回" forState:UIControlStateNormal];

[leftBtn addTarget:self action:@selector(backLastView) forControlEvents:UIControlEventTouchUpInside];

leftBtn.frame = CGRectMake(0, 0, 60, 40);

[leftBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

//將leftItem設(shè)置為自定義按鈕

UIBarButtonItem? *leftItem =[[UIBarButtonItem alloc]initWithCustomView: leftBtn];

self.navigationItem.leftBarButtonItem = leftItem;

//按鈕點擊事件 返回上一個界面

- (void)backLastView{

[self.navigationController popViewControllerAnimated:YES];

}

需要注意的是~xcode自動從6.0之后~leftItem距左屏幕邊距有16個像素點~這樣會導致在視覺上會感覺有點偏右~不算美觀~然而對于大多數(shù)處女座的程序員來說~這明顯是不能讓人去接受的~解決辦法有很多~在這里提供一個最為方便的方法~設(shè)置一下按鈕的contentEdgeInsets(文字)imageEdgeInsets(圖片)屬性即可~如:leftButton.contentEdgeInsets = UIEdgeInsetsMake(0, -16, 0, 0);

2.為什么系統(tǒng)自帶的右滑返回手勢失效

這也是我一直所關(guān)系的問題~還希望知道的可以私信我~

笨笨編程官方微博

[http://weibo.com/2728581591/profile?rightmod=1&wvr=6&mod=personnumber]

qq:2638006336

3.怎么解決這個失效問題

其實很簡單很簡單~只需要添加下面這一句代碼即可

self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;

由于根視圖控制器是不需要具備左側(cè)滑返回功能陷遮,如果在根控制器滑動,會有導致界面無法再滑動的bug篙骡;

只需禁用即可还棱。解決方案:需在右滑返回根視圖控制器的VC中添加以下方法蝶桶。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

if (self.childViewControllers.count == 1) {

// 表示用戶在根控制器界面耍贾,就不需要觸發(fā)滑動手勢,

return NO;

}

return YES;

}


其實到這里~問題應該都解決了~但是~畢竟右滑返回手勢只能靠近屏幕左邊緣才能使用~我們?nèi)绾瓮ㄟ^調(diào)用系統(tǒng)方法來實現(xiàn)在整個屏幕右滑就可以實現(xiàn)返回功能呢~

setp1:需要獲取系統(tǒng)自帶滑動手勢的target對象

id target = self.navigationController.interactivePopGestureRecognizer.delegate;

setp2:創(chuàng)建全屏滑動手勢~調(diào)用系統(tǒng)自帶滑動手勢的target的action方法

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];

step3:設(shè)置手勢代理~攔截手勢觸發(fā)

pan.delegate = self;

step4:別忘了~給導航控制器的view添加全屏滑動手勢

[self.view addGestureRecognizer:pan];

step5:將系統(tǒng)自帶的滑動手勢禁用

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

steo6:還記得剛剛設(shè)置的代理嗎挟伙?下面方法什么時候調(diào)用楼雹?在每次觸發(fā)手勢之前都會詢問下代理,是否觸發(fā)尖阔。

這個方法就是攔截手勢觸發(fā)的方法.

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{}

return NO;則不需要觸發(fā)滑動手勢

return YES;則需要觸發(fā)滑動手勢


轉(zhuǎn)載 -- http://www.reibang.com/p/78fc64d387ec

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贮缅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子介却,更是在濱河造成了極大的恐慌谴供,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件齿坷,死亡現(xiàn)場離奇詭異桂肌,居然都是意外死亡,警方通過查閱死者的電腦和手機永淌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門崎场,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人遂蛀,你說我怎么就攤上這事谭跨。” “怎么了李滴?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵螃宙,是天一觀的道長。 經(jīng)常有香客問我悬嗓,道長污呼,這世上最難降的妖魔是什么裕坊? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任包竹,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘周瞎。我一直安慰自己苗缩,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布声诸。 她就那樣靜靜地躺著酱讶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彼乌。 梳的紋絲不亂的頭發(fā)上泻肯,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音慰照,去河邊找鬼灶挟。 笑死,一個胖子當著我的面吹牛毒租,可吹牛的內(nèi)容都是我干的稚铣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼墅垮,長吁一口氣:“原來是場噩夢啊……” “哼惕医!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起算色,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤抬伺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剃允,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沛简,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年斥废,在試婚紗的時候發(fā)現(xiàn)自己被綠了椒楣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡牡肉,死狀恐怖捧灰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情统锤,我是刑警寧澤毛俏,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站饲窿,受9級特大地震影響煌寇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逾雄,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一阀溶、第九天 我趴在偏房一處隱蔽的房頂上張望腻脏。 院中可真熱鬧,春花似錦银锻、人聲如沸永品。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鼎姐。三九已至,卻和暖如春更振,著一層夾襖步出監(jiān)牢的瞬間炕桨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工肯腕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谋作,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓乎芳,卻偏偏與公主長得像遵蚜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奈惑,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容