Android NavigationController 右滑手勢詳解
蘋果一直都在人機交互中盡力做到極致,在iOS7中,新增加了一個小小的功能,也就是這個api:self.navigationController.interactivePopGestureRecognizer.enabled = YES;
這個api功能就是在NavigationController堆棧內(nèi)的UIViewController可以支持右滑手勢,也就是不用點擊右上角的返回按鈕,輕輕在屏幕左邊一滑,屏幕就會返回,隨著ios設(shè)備屏幕的增大,這個小功能讓手指短,拇指大和手殘人士看到了福音。
這個功能是好,但是經(jīng)常我們會有需求定制返回按鈕,如果手動定制了返回按鈕,這個功能將會失效,也就是自定義了navigationItem的leftBarButtonItem,那么這個手勢就會失效。
解決方法找到兩種
1.重新設(shè)置手勢的delegate
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
2.當(dāng)然你也可以自己響應(yīng)這個手勢的事件
[self.navigationController.interactivePopGestureRecognizer addTarget:self action:@selector(handleGesture:)];
有更多方法以后繼續(xù)補充,這里可以根據(jù)自己需要進行選擇,如果只是簡單定制了返回按鈕,第一種最簡單,一句代碼搞定。
問題二:ios開發(fā) 向右滑動手勢實現(xiàn)返回.在NavigationController中如何設(shè)置
在navigationController中實現(xiàn)向右滑動 返回功能
系統(tǒng)提供的backbarbuttonitem,不用添加任何代碼即可實現(xiàn)向右滑動后退功能,但是往往要對按鈕修改樣式等時,就需要自定義leftbarbuttonitem,此時向右滑動即失效.通過下面方法即可解決該問題.(本人親自實驗過)
主要是通過設(shè)置navigationController.interactivePopGestureRecognizer 此手勢的一些屬性,此手勢大家可以通過sdk查看說明,這里不細說
1. self.navigationController.interactivePopGestureRecognizer.enabled = YES | NO; 手勢有效與否
2. self.navigationController.interactivePopGestureRecognizer.delegate = self; 手勢的代理,一般會設(shè)置為self
1中的屬性,再viewcontroller中默認的設(shè)置為YES,即手勢有效.按照2中的屬性設(shè)置后,當(dāng)前的viewcontroller即可以實現(xiàn)該向右滑動后退功能,但是當(dāng)回到navigationController的rootView中再次做出向右滑動時,程序會有問題(再次push子controller時,程序卡在當(dāng)前界面無法跳轉(zhuǎn)).有效解決方案如下:
說明:有兩個controllerA,B
navigationController的rootview設(shè)置為A,在A中點擊按鈕后push B.在A的 -(void)viewDidAppear:(BOOL)animated方法中加入self.navigationController.interactivePopGestureRecognizer.enabled = NO;代碼如下:
- (void)viewDidAppear:(BOOL)animated
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO; //讓rootView禁止滑動
}
}
然后再B中的- (void)viewDidLoad方法中加入
- (void)viewDidLoad
{
// 配置返回按鈕
UIBarButtonItem * backItem = [self barButtonForImageNames:@[@"icon-返回", @"", @""] action:@selector(popBack)];
backItem.title = @"";
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
self.navigationItem.leftBarButtonItem = backItem;
if ([[[UIDevice currentDevice] systemVersion] floatValue]
>= 7.0) {
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
這樣即可以保證再A中向右滑動后再次pushB時不會卡在A界面.
再項目中大家一般會創(chuàng)建風(fēng)格統(tǒng)一的界面,一般都會創(chuàng)建一個基礎(chǔ)viewcontroller,再此viewcontroller擴展一個配置leftbarbutton的方法,在該方法中加入B的viewDidLoad中的代碼,這樣在創(chuàng)建leftbarbutton的同時,直接加了返回的操作(不用每個viewController中都加入這樣一段代碼).然后只在navigationController的rootView中加入A的(void)viewDidAppear:(BOOL)animated方法即可.
以上內(nèi)容是Android NavigationController 右滑手勢詳解,希望大家喜歡。
- Android BottomNavigationBar底部導(dǎo)航控制器使用方法詳解
- Mono for Android 實現(xiàn)高效的導(dǎo)航(Effective Navigation)
- Android Navigation TabBar控件實現(xiàn)多彩標(biāo)簽欄
- Android抽屜導(dǎo)航Navigation Drawer實例解析
- android popwindow實現(xiàn)左側(cè)彈出菜單層及PopupWindow主要方法介紹
- Android界面設(shè)計(APP設(shè)計趨勢 左側(cè)隱藏菜單右邊顯示content)
- Android高仿QQ6.0側(cè)滑刪除實例代碼
- Android使用ViewDragHelper實現(xiàn)仿QQ6.0側(cè)滑界面(一)
- Android使用ViewDragHelper實現(xiàn)QQ6.X最新版本側(cè)滑界面效果實例代碼
- Android中NavigationView的使用與相關(guān)問題解決
相關(guān)文章
在IOS中為什么使用多線程及多線程實現(xiàn)的三種方法
這篇文章給大家介紹在IOS中為什么使用多線程及多線程實現(xiàn)的三種方法,基本上使用這三種方法實現(xiàn)多線程(NSThread Grand Centeral Dispatch(GCD) NSOperation和NSOperationQueue),感興趣的朋友可以參考下本篇文章2015-11-11
淺談關(guān)于如何檢測iOS14本地網(wǎng)絡(luò)權(quán)限的一些思路
這篇文章主要介紹了淺談關(guān)于如何檢測iOS14本地網(wǎng)絡(luò)權(quán)限的一些思路,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
iOS漸變圓環(huán)旋轉(zhuǎn)動畫CAShapeLayer CAGradientLayer
這篇文章主要介紹了iOS漸變圓環(huán)旋轉(zhuǎn)動畫CAShapeLayer CAGradientLayer的相關(guān)資料,需要的朋友可以參考下2016-09-09

