推送ViewController后,iOS interactivePopGestureRecognizer会自动启用

时间:2014-10-30 21:09:22

标签: ios uinavigationcontroller ios8 interactivepopgesture

我有一个 UINavigationController 的子类,堆栈中最多有4个 ViewControllers 。让我们先称它们为VC ...... 4thVC。我的NavController可以在VC之间执行自定义转换,ios7 / 8后退手势应该被禁用和启用,具体取决于当前哪个VC位于堆栈顶部。我已将根VC(firstVC)设置为NavController的委托并尝试在委托方法中启用/禁用后退手势

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

    if ([viewController respondsToSelector:@selector(needsBackGestureEnabled)]) {

        [self.navigationController.interactivePopGestureRecognizer setEnabled:YES];
        NSLog(@"Back gesture enabled");
        self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;

    } else {

        if ([navigationController.interactivePopGestureRecognizer isEnabled]) {
            [self.navigationController.interactivePopGestureRecognizer setEnabled:NO];
            NSLog(@"Back gesture disabled");
            self.navigationController.interactivePopGestureRecognizer.delegate = nil;
        }
    }

}
除了一个小故障之外,它就像一个魅力。我觉得一个简短的方案可能会更好地解释情况:

FirstVC - [CustomTran] - &gt; SecondVC - [推送] - &gt; ThirdVC - [推送] - &gt; FourthVC

FourthVC是唯一一个拥有 -needsBackGestureEnabled 选择器的人,但是在从第二个到第三个后退过程后,手势会自动启用。即使后退按钮与CustomBarButtonItem一起使用。我觉得执行默认的 -pushViewController 动画会以某种方式启用后退手势。我试图在 -pushViewController 的NavController子类中明确地禁用它,但它没有改变任何东西。知道为什么会这样,以及如何解决这个问题?

0 个答案:

没有答案