Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用导航控制器关闭返回视图的自动手势?_Ios_Objective C_Xcode_Ios7 - Fatal编程技术网

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

Ios 如何使用导航控制器关闭返回视图的自动手势?,ios,objective-c,xcode,ios7,Ios,Objective C,Xcode,Ios7,因此,我注意到,当用户在屏幕的最左侧(任意方向)滑动时,我的所有视图都会收到返回(弹出视图)的手势(这是iOS7新增的功能) 到目前为止,我已尝试使用以下方法将其关闭,但没有任何效果: [self.navigationItem setHidesBackButton:YES]; 在NavigationController本身的init中(代理似乎正在使用它)。obj-c 敏捷的 加布里埃尔的解决方案 要支持iOS 7之前的任何iOS,您需要使用以下代码包装此代码: if([self.na

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

到目前为止,我已尝试使用以下方法将其关闭,但没有任何效果:

    [self.navigationItem setHidesBackButton:YES];
在NavigationController本身的init中(代理似乎正在使用它)。

obj-c 敏捷的
加布里埃尔的解决方案

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

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

这将停止应用程序在iOS 6和iOS 5中因缺少选择器而崩溃。

将此代码用于iOS 7之前的版本

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

我发现将手势设置为“仅禁用”并不总是有效。它确实有用,但对我来说,它只是在我使用了一次后才起作用。第二次它不会触发回击动作

对我来说,解决方法是委派手势并实现shouldbeagin方法以返回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;
}

我在我的项目中使用此解决方案,它仅禁用InteractiveProgEstureRecognitor,并允许您使用其他手势识别器

- (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;

    }

}
对于IOS 8(Swift):


是 啊这很有效。但它仅在创建NavigationController后在AppDelegate中起作用。我试过初始化并加载导航控制器的实现,但没有成功。你说的初始化并加载导航控制器是什么意思?在我的导航控制器(UINavigationController的子类)中:我试过“-(id)initWithCoder:(NSCoder*)aDecoder{”添加:
super.navigationController.interactiveepogesturerecognizer.enabled=YES;self.navigationController.interactiveepogesturerecognizer.enabled=YES;
我将尝试实现
initWithNavigationBarClass:toolbarClass:
initWithRootViewController:
这两种由
UINavigation定义的初始化方法控制器
这不起作用,行:self.navigationController.interactiveepogesturerecognizer.delegate=self返回一个不符合协议的错误。我假设协议需要上述函数,但它不能解决错误。我将它放在viewDidLoad()中在vc上我需要禁用它。没有一个答案适用于iOS8@sole007见下面我的答案..曾为me@PhilHudson显示一些代码。您是否将界面生成器中的NavigationController设置为自定义的?
- (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;
}
- (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;

    }

}
class MainNavigationController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.interactivePopGestureRecognizer.enabled = false

        // Do any additional setup after loading the view.
    }

}