问题:根据产品需求有时候,要求某些界面不允许pop手势返回,有些界面允许pop手势返回
解决:我们统一在UINavigationController类处理,然后在界面实现
@interface MyNavigationController ()<UIGestureRecognizerDelegate>
@end
@implementation MyNavigationController
- (void)viewDidLoad
{
[super viewDidLoad];
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.delegate = self;
}
}
//实现代理方法
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer == self.interactivePopGestureRecognizer) {
if (self.viewControllers.count == 1) {
return NO;
}else {
id <UIViewControllerTransitionCoordinator> coordinator = [self transitionCoordinator];
if ([coordinator isAnimated]) {// 如果有ViewController之间的转场动画
return NO;
}
}
}
return YES;
}
//在界面实现
@interface ManualQuotingViewController ()
{
//保留上一个界面的pop手势属性
BOOL _lastInteractivePopGestureRecognizer;
}
@end
@implementation ManualQuotingViewController
- (void)viewDidLoad {
[super viewDidLoad];
_lastInteractivePopGestureRecognizer = self.navigationController.interactivePopGestureRecognizer.enabled;
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
// 在界面消失时,还原原先的pop手势属性
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = _lastInteractivePopGestureRecognizer;
}