效果图
21.gif
实现步骤:
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];
}
|