如何實現(xiàn)UINavigationController控制下的控制器跨級跳轉及邊緣左側右滑手勢的處理

今天 有人給我提出了一個這樣一個功能實現(xiàn)需求 : 假如有三個控制器 有 被同一個導航控制器所管理著 根控制器推到第二個 第二個推到第三個 導航欄自帶的返回按鈕是回到上一級界面 現(xiàn)在要求從第三個導航欄的barButton pop回到第一個也就是根視圖控制器
你肯定說這個問題非常簡單啊 直接自定義第三個控制器的導航欄的leftBarButton就行了唄 在其觸發(fā)方法里指定他

[self.navigationController popToRootViewControllerAnimated:YES]

但是事情遠遠沒那么簡單 iOS7.0之后 蘋果新推出的一個小功能 就是對于UINavagationController堆棧里的UIViewController,只要輕輕在視圖控制器的左邊緣右滑一下,該視圖控制器就會pop出棧(前提當然是對于非根視圖控制器而言)

現(xiàn)在的要求是不光是點擊導航欄的leftBarButton 能回到第一個界面
左側邊緣右滑也要回到第一個界面 而在你自定義完barButton之后 你會發(fā)現(xiàn)左側邊緣右滑 再怎么滑也滑不過去啦

這時候你可能會想那我再加一個手勢唄
這里先嘗試家里一個輕掃手勢


#import "ThirdViewController.h"

@interface ThirdViewController ()

@end

- (void)viewDidLoad {

 UISwipeGestureRecognizer *swiper = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swiperAction)];
    swiper.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:swiper];
    
}

- (void)swiperAction
{
 [self.navigationController popToRootViewControllerAnimated:YES];
}

這樣寫完以后 果然實現(xiàn)了 從第三個界面的左側邊緣右滑 pop回到第一個界面

你可能會想 so easy 但是 大哥 可別高興地太早 來自汪星的某產品經(jīng)理又會說:"no no no 這跟我要的差遠了 你這只是突兀地一下跳到第一個界面了 而人家蘋果自帶的邊緣右滑 卻可以慢慢滑動 看到過程 " 于是乎 你不得不又投入到代碼中

實現(xiàn)的方式應該有很多 今天我教大家一種簡單易懂的方法 僅用幾行代碼就OK啦 根本不用添加手勢神馬的 既然第二個界面被推出來之后 退出第三個界面之后 暫時用不到了 而它又稱為界面一和界面三之間的一到屏障 我們不妨在界面二視圖小時之后 將它從
self.navigationController.viewControllers 中移除掉 這樣界面三再返回時 界面二已經(jīng)不在棧中 此時棧中只有界面一和界面三兩個控制器 pop 完全無障礙
看代碼


#import "SecondViewController.h"
#import "ThirdViewController.h"
@interface SecondViewController ()

@end
- (void)viewDidDisappear:(BOOL)animated
{
   [super viewWillDisappear:animated];
   NSMutableArray *vcArr = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
   [vcArr removeObject:self];
   self.navigationController.viewControllers = vcArr;
}

如此這樣便可 可是親愛的們 別忘了 界面三的leftBarButton自定義之后 左側邊緣右滑的手勢已不復存在 別著急 一行代碼就可以解決這個問題 關于這個問題 我另一篇文章中有專門做解釋 http://www.itdecent.cn/p/ef58a80f6b78

self.navigationController.interactivePopGestureRecognizer.delegate = nil;

現(xiàn)在再運行看看 是不是效果完美

屏幕快照 2016-05-20 21.19.29.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容