iOS 关于禁止单个页面的边缘返回

昨天接到新的修改需求,要求有的页面不能返回,必须强制用户往下走流程,当时一听差点给跪啦!无奈啊,谁叫我是干开发的,改吧!初步一想,把返回按钮关掉就OK啦,确实返回按钮关掉就不能按返回按钮返回上一页啦,窃喜!!!后来发现还有边缘返回,这下头疼了,只关掉按钮明显达不到效果,于是赶紧求助小伙伴,各种支招,真是非常的感谢他们,一一试过,发现达不到效果。无奈之下,自己尝试,历经磨难,终于成功,现在献上代码,希望对大家有帮助!写的不好的地方尽请见谅,本人第一次写!

- (void)viewDidAppear:(BOOL)animated {

  [super viewDidAppear:animated];
  self.isCanSideBack = NO;
 //关闭ios右滑返回
 if([self.navigationControllerrespondsToSelector:@selector(interactivePopGestureRecognizer)]) {

  self.navigationController.interactivePopGestureRecognizer.delegate=self;
 }
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer {

   return self.isCanSideBack;
}

之前的写法,测试之后发现有bug,如果是直接调用[self.navigationController popToRootViewControllerAnimated:YES];不会走viewDidDisappear里的逻辑,离开该页以后,右滑返回失效了,所以做了如下的修改,在离开页面的方法里,调用[self resetSideBack];即可保证只是当前页的右滑返回被关闭,其他页面的右滑返回依然正常!

- (void)viewDidDisappear:(BOOL)animated {

[superviewDidDisappear:animated];
[self resetSideBack];
}
/**
*恢复边缘返回
*/
- (void)resetSideBack {

self.isCanSideBack=YES;
//开启ios右滑返回
if([self.navigationControllerrespondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}

补充说明:实现类需要继承 <UIGestureRecognizerDelegate>协议,而 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer是系统自己调用的!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容