self.navigationController.interactivePopGestureRecognizer.enabled
总的来说有三种情况下手势不应该执行:
- 当前controller是rootViewController时
- pop动画正在进行时
- 左滑时
另外。
该文采取的办法是对navigationController自带的interactivePopGestureRecognizer下手,禁用interactivePopGestureRecognizer,给interactivePopGestureRecognizer的delegate换上自定义的UIPanGestureRecognizer。
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
***********************************************************************
情况二: ( 自定义导航栏返回按钮leftBarButtonItem 且 项目中只有多个UITabBarController
或者 未自定义导航栏返回按钮leftBarButtonItem 且 项目中只有多个UITabBarController )
解决办法:
1、在初始化UITabBarController的类TabVCA ,然后调用 push 方法推出该 TabVCA 的代码之后加上代码,如:
[self.navigationController pushViewController:[TabViewControllerA new] animated:YES];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
}
2、接着步骤1中推出的TabVCA中的viewControllers,比方说改TabVCA中包含(X,Y,Z)三个导航的rootController ,你需要在这三个主VC中分别设置 :<1> 在viewDidLoad方法中设置以下代码
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
<2> 在viewDidAppear方法中设置以下代码(前提改VC是该Tab中的某个Navi)
self.navigationController.navigationBar.hidden = NO;//该方法禁止使用右滑手势,这样可以避免最底层VC右滑时出现的App假死状态
<3> 在viewWillDisappear方法中设置以下代码self.navigationController.interactivePopGestureRecognizer.enabled = YES;//开启右滑手势
***********************************************************************
附 :自定义返回按钮
UIButton *leftBackItem = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 22, 22)];
[leftBackItem setImage:[UIImage imageNamed:@"messageChatBackIcon@2x.png"] forState:UIControlStateNormal];
[leftBackItem addTarget:self action:@selector(rongYunBackItemAction) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftBackItem];
self.navigationItem.leftBarButtonItem = backButtonItem;