参考
iOS禁用侧滑返回手势要点解析
知乎
CocoaChina
博客园
一、问题描述
1、iOS App,TableView侧滑后点击Cell,App卡死
2、当App页面处于死机后,按Home键后,再次启动App时,App应用会显示之前操作的下一步的动作,但还是一样会死机,重复如此 。
3、只有将进程杀掉,再次启动App才可流畅操作。
二、问题分析
1、当前App是在RootViewController,先侧滑然后点击Push至以一个界面,100%卡住APP
2、Cell响应了点击事件,并且创建了下一个界面,只是没显示出来。点击Debug View Hieraarchy 按钮可查看到下一个界面的视图被创建出来了。
3、当前RootViewController有一个自定义的UINavigationController,可能是NavigationController的手势失效或发生冲突导致了App卡死
三、解决方法
1、自定义的UINavigationController遵守UINavigationControllerDelegate协议
@interface MyNavigationController ()<UINavigationControllerDelegate>
2、viewDidLoad中设置代理为当前控制器
self.delegate = self;
3、实现代理方法
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
//set gesture yes when showViewController
if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
navigationController.interactivePopGestureRecognizer.enabled = YES;
}
// if rootViewController, set delegate nil
if (navigationController.viewControllers.count == 1) {
navigationController.interactivePopGestureRecognizer.enabled = NO;
navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
- 判断当前为RootController, 设置手势无效, 而且必须设置delegate为nil, 这样的话就可以解决卡死的问题了。