如何給全局添加滑動返回手勢及解除某個界面的滑動返回手勢

? ? ? ? 說到滑動返回手勢,我想大家肯定不陌生了,從iOS ?7 開始就開始有了,系統默認的是

self.navigationController.interactivePopGestureRecognizer.enabled = YES | NO;? ? ? 手勢有效與否

但是往往我們不會用到系統的,因為我們可能大多數會繼承一個導航欄控制器,自己定義全局的導航欄樣式,那么系統默認的就不管用了,這時候大家肯定都在熟悉不過了,在寫的父類導航欄控制器中,快速的寫下如下代碼:

// 設置系統的手勢返回代理

id target = self.interactivePopGestureRecognizer.delegate;

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

[self.view addGestureRecognizer:_pan];

_pan.delegate = self;

//禁用系統的返回手勢

self.interactivePopGestureRecognizer.enabled = NO;

// 開啟的手勢返回

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

// 判斷導航控制器的棧內控制器數量,如果只有一個就關閉手勢,否則就開啟

return (self.viewControllers.count - 1);

}

沒錯這樣是可以了,但是往往這些不能滿足我們的要求,說不定你有的界面不需要這個返回手勢,也或者是某個界面也用到了這個UIPanGestureRecognizer手勢,這時候可能會影響到操作體驗,你可能會想到禁用到某個界面的返回手勢就行了,你可能會這樣寫,網上很多這個方法

- (void)viewDidAppear:(BOOL)animated

{

[superviewDidAppear:animated];

//?禁用返回手勢

if([self.navigationControllerrespondsToSelector:@selector(interactivePopGestureRecognizer)])?{

self.navigationController.interactivePopGestureRecognizer.enabled=NO;

}

}這個方法不管用,因為我們已經舍棄掉系統的方法了。

也需你還會這樣寫,在你需要禁用返回手勢的控制器中

- (void)viewDidLoad {

[super viewDidLoad];

id traget = self.navigationController.interactivePopGestureRecognizer.delegate;

UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:traget action:nil];

[self.view addGestureRecognizer:pan];

沒錯,上面的方法是把滑動返回手勢禁用了。可是這同樣把UIPanGestureRecognizer手勢也禁用了,如果你的界面用到這個手勢估計就不行了。

這樣寫就沒有問題,在你的父類導航欄控制器中,代理方法中寫上這幾句就行了:

// 開啟的手勢返回

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

// 當前頁面是顯示結果頁,不響應滑動手勢

UIViewController *vc = [self.childViewControllers lastObject];

if ([vc isKindOfClass:[GestureViewController class]]||[vc isKindOfClass:[GestureVerifyViewController class]]) {

? ? return NO;

}

// 判斷導航控制器的棧內控制器數量,如果只有一個就關閉手勢,否則就開啟

return (self.viewControllers.count - 1);

return ?Yes;

}

OK,這樣就可以了,說不定你有更好的方法,歡迎指正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容