最近我遇到了将UIViewController
推送到UINavigationViewController
的错误,我找到了解决方法。
错误情景:
如何推送UIViewController
(通过segue,使用pushViewController,...)并不重要。在NavigationViewController的RootViewController中,尝试使用滑动后退手势! (什么都不应该发生),然后尝试通过点击一个元素将ViewController推入您的NavigationViewController。 =>应用程序冻结!在这里,如果您通过XCode捕获屏幕,您会发现当前可见屏幕是下一个屏幕!! (但它不是!),Cpu使用和任何其他事情是正常的。 你可以通过另一种轻扫手势退出App Freezing!
以下是解决方案:
在您的BaseNavigationViewController(扩展UINavigationViewController
)中插入这些代码(特别是当您使用UITabbarNavigationViewController
时)
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animate {
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
if (self.viewControllers.count > 1) {
self.interactivePopGestureRecognizer.delegate = self;
self.interactivePopGestureRecognizer.enabled = YES;
} else {
self.interactivePopGestureRecognizer.delegate = nil;
self.interactivePopGestureRecognizer.enabled = NO;
}
}
}
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
return self.viewControllers.count > 1;
}
return NO;
}
不要忘记写这些代码:
在BaseNavigationViewController的viewDidLoad
中:
self.delegate = self;
并且您的BaseNavigationViewController
必须使用以下两个协议:
UINavigationControllerDelegate
,UIGestureRecognizerDelegate