1

我有一个UINavigationController的子类,堆栈中最多有 4 个ViewController。让我们称它们为 firstVC ...fourthVC。我的 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]-> SecondVC -[push]-> ThirdVC -[push]-> FourthVC

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

4

0 回答 0