日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios开发返回按钮消失_iOS开发之自定义导航栏返回按钮右滑返回手势失效的解决...

發(fā)布時(shí)間:2025/4/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios开发返回按钮消失_iOS开发之自定义导航栏返回按钮右滑返回手势失效的解决... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

什么時(shí)候會被攔截

當(dāng)我們使用代碼或者用storyboard來創(chuàng)建一個(gè)新的控制器的時(shí)候~我們很少注意導(dǎo)航欄的leftItem~因?yàn)檎G闆r下~push到下一個(gè)界面的leftItem就是上一個(gè)界面的self.title~并且它也就是一個(gè)返回的功能~所以~我們很少去在意這些~但當(dāng)我們有些需求~需要自定義leftItem的時(shí)候~那么問題就來了~

問題一:怎么自定義leftItem

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

問題三:怎么解決這個(gè)失效問題

1.怎么自定義leftItem

其實(shí)~這個(gè)東西嘛~說簡單也是很簡單的~因?yàn)閪我們很明確的知道~左導(dǎo)航欄就一個(gè)功能~那就是返回上一個(gè)界面~很顯然~是需要用戶交互的~必用按鈕~

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

//自定義一個(gè)按鈕

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;

//按鈕點(diǎn)擊事件 返回上一個(gè)界面

- (void)backLastView{

[self.navigationController popViewControllerAnimated:YES];

}

需要注意的是~xcode自動從6.0之后~leftItem距左屏幕邊距有16個(gè)像素點(diǎn)~這樣會導(dǎo)致在視覺上會感覺有點(diǎn)偏右~不算美觀~然而對于大多數(shù)處女座的程序員來說~這明顯是不能讓人去接受的~解決辦法有很多~在這里提供一個(gè)最為方便的方法~設(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.怎么解決這個(gè)失效問題

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

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

其實(shí)到這里~問題應(yīng)該都解決了~但是~畢竟右滑返回手勢只能靠近屏幕左邊緣才能使用~我們?nèi)绾瓮ㄟ^調(diào)用系統(tǒng)方法來實(shí)現(xiàn)在整個(gè)屏幕右滑就可以實(shí)現(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:別忘了~給導(dǎo)航控制器的view添加全屏滑動手勢

[self.view addGestureRecognizer:pan];

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

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

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

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

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

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

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

總結(jié)

以上是生活随笔為你收集整理的ios开发返回按钮消失_iOS开发之自定义导航栏返回按钮右滑返回手势失效的解决...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。