問題:
當A controller作為navigationController的rootcontroller時,如果在A中向右側(cè)滑動,再push到下個界面時會出現(xiàn)界面假死。原因此時導航控制器的viewControllers的count值為1,滑動時沒有上層控制器,系統(tǒng)不知如何處理,所以會出現(xiàn)假死。
解決方法:
自定義導航控制器,實現(xiàn)如下代理
- (void)viewDidLoad {
[super viewDidLoad];
__weak BaseNavigationViewController *weakSelf = self;
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.delegate = weakSelf;
self.delegate = weakSelf;
}
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ( [self respondsToSelector:@selector(interactivePopGestureRecognizer)]&&animated == YES ){
self.interactivePopGestureRecognizer.enabled = NO;
}
[super pushViewController:viewController animated:animated];
}
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated {
if ( [self respondsToSelector:@selector(interactivePopGestureRecognizer)]&& animated == YES ){
self.interactivePopGestureRecognizer.enabled = NO;
}
return [super popToRootViewControllerAnimated:animated];
}
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated {
if( [self respondsToSelector:@selector(interactivePopGestureRecognizer)] ){
self.interactivePopGestureRecognizer.enabled = NO;
}
return [super popToViewController:viewController animated:animated];
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animate {
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]){
if (navigationController.childViewControllers.count == 1) {
self.interactivePopGestureRecognizer.enabled = NO;
}else {
self.interactivePopGestureRecognizer.enabled = YES;
}
}
}