很久没来写文章了,今天过来露个脸,说好的要坚持写博客的,嘎嘎嘎,最近在运营给我反馈了一个问题:“侧滑手势失效了”。本来应该是单纯解决侧滑手势失效的问题,后来发现项目中很多地方隐藏了导航栏,而且项目中有些控制器不能使用侧滑返回 ,必须点击某个按钮才能退出这个控制器,所以这里记录一下解决方案,
侧滑手势失效的解决方案
首先侧滑手势失效大部分原因是自定义返回按钮,如果你也也因为自定义返回按钮导致侧滑失效可以使用如下方案解决:
/**
拦截系统push方法
@param viewController 要进入的控制器
@param animated 是否动画
*/
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (self.childViewControllers.count) {
// 如果自定义返回按钮后, 滑动返回可能失效, 需要添加下面的代码
__weak typeof(viewController)Weakself = viewController;
self.interactivePopGestureRecognizer.delegate = (id)Weakself;
}
[super pushViewController:viewController animated:animated];
}
说明一下 ,上面的这个方法是导航控制器的代理方法,当你push进入某一个控制器时会调用这个方法。当然还有其他的解决方案,例如自己添加一个返回手势即可,很多app都是添加全屏的返回手势,这里我就不想述了,有兴趣的自己研究一下,也不是很难。
禁止系统自带侧滑返回
当某一个控制器你想要禁止侧滑手势时 ,可以使用以下方案:
// 禁用返回手势,需要开启只需设置为yes即可。默认开启
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
说明:当然如果你乐于尝试的话,可能你会想到在要禁止手势的控制器里面将导航控制器的interactivePopGestureRecognizer.delegate 置为nil,
这个方案我也尝试过了,没有效果。也许是我使用方式不对,还有其他方案的可以评论告诉我,今天就写到这咯。see you 啦啦