实现步骤:
1、viewDidLoad需要做的事情
1
2
3
4
5
6
7
8
|
self.delegate = self; __weak typeof (self) weakSelf = self; if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.interactivePopGestureRecognizer.delegate = weakSelf; } |
2、实现UIGestureRecognizerDelegate代理中的方法
1
2
3
4
5
6
7
|
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ if (self.navigationController.viewControllers.count == 1 ) { return NO; } else { return YES; } } |
3、实现UINavigationControllerDelegate代理中的方法
-
1.实现didShowViewController方法
1
2
3
4
5
6
7
8
9
10
11
|
- ( void )navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { navigationController.interactivePopGestureRecognizer.enabled = YES; } //使navigationcontroller中第一个控制器不响应右滑pop手势 if (navigationController.viewControllers.count == 1 ) { navigationController.interactivePopGestureRecognizer.enabled = NO; navigationController.interactivePopGestureRecognizer.delegate = nil; } } |
-
2.此方法中拦截所有push 进来的控制器
1
2
3
4
5
6
|
-( void )pushViewController:(UIViewController *)viewController animated:(BOOL)animated{ if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.interactivePopGestureRecognizer.enabled = NO; } [ super pushViewController:viewController animated:animated]; } |