如何closures自动手势以导航控制器返回视图?

所以我注意到,当用户在屏幕的左侧滑动(以任一方向)时,我的所有视图都会接收到手势返回(popup视图)( 这是iOS7中的新增function

我已经尝试了迄今为止无济于事closures使用:

[self.navigationItem setHidesBackButton:YES]; 

在NavigationController本身的init中(就像代理似乎正在使用那样)。

OBJ-C

 self.navigationController.interactivePopGestureRecognizer.enabled = NO; 

迅速

 navigationController?.interactivePopGestureRecognizer?.isEnabled = false 

添加到Gabriele的解决scheme。

为了在iOS 7之前支持任何iOS,你需要用下面的代码来包装这个代码:

 if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = NO; } 

这将停止应用程序在iOS 6和iOS 5中丢失的select器崩溃。

我在我的项目中使用这个解决scheme,它只禁用interactivePopGestureRecognizer,并允许您使用另一个手势识别器。

 - (void)viewDidLoad { [super viewDidLoad]; if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = NO; self.navigationController.interactivePopGestureRecognizer.delegate = self; } } - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { if ([gestureRecognizer isEqual:self.navigationController.interactivePopGestureRecognizer]) { return NO; } else { return YES; } } 

我发现将手势设置为禁用,并不总是工作。 它确实有用,但是对我来说,它只是在我曾经使用过背后的事情之后才做的。 第二次,它不会引起背痛。

修复我是委托的手势,并实现shouldbegin方法返回NO:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // Disable iOS 7 back gesture if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = NO; self.navigationController.interactivePopGestureRecognizer.delegate = self; } } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // Enable iOS 7 back gesture if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = YES; self.navigationController.interactivePopGestureRecognizer.delegate = nil; } } - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { return NO; } 

对于IOS 8(Swift):

 class MainNavigationController: UINavigationController { override func viewDidLoad() { super.viewDidLoad() self.interactivePopGestureRecognizer.enabled = false // Do any additional setup after loading the view. } } 

使用此代码以前的iOS 7

 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = NO; }