如何关闭自动手势以使用导航控制器返回视图?

Dan*_*li3 22 xcode objective-c ios ios7

因此,我注意到当用户在屏幕的最左侧(在任一方向上)滑动时,我的所有视图都接收到返回(弹出视图)的手势(这是iOS7的新功能)

到目前为止,我已尝试使用以下方法将其关闭:

    [self.navigationItem setHidesBackButton:YES];
Run Code Online (Sandbox Code Playgroud)

在NavigationController本身的init内(因为委托似乎正在使用它).

Gab*_*lla 72

OBJ-C

self.navigationController.interactivePopGestureRecognizer.enabled = NO;
Run Code Online (Sandbox Code Playgroud)

迅速

navigationController?.interactivePopGestureRecognizer?.isEnabled = false
Run Code Online (Sandbox Code Playgroud)


Dan*_*li3 6

加入Gabriele的解决方案.

要在iOS 7之前支持任何iOS,您需要使用以下代码包装此代码:

if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    }
Run Code Online (Sandbox Code Playgroud)

这将阻止App在iOS 6和iOS 5中崩溃,导致缺少选择器.


小智 5

我在我的项目中使用此解决方案,它仅禁用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;

    }

}
Run Code Online (Sandbox Code Playgroud)