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