我有一个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 子类中明确禁用它,但它没有改变任何东西。知道为什么会发生这种情况以及如何解决这个问题吗?