如何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; }