系统返回按钮事件拦截
2017-07-03 00:00
483 查看
//主要实现原理 @implementation UINavigationController (ShouldPopOnBackBtn) - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item { BOOL shouldPop = YES; // 看一下当前控制器有没有实现代理方法 currentViewControllerShouldPop // 如果实现了,根据当前控制器的代理方法的返回值决定 // 没过没有实现 shouldPop = YES UIViewController* currentVC = [self topViewController]; if([currentVC respondsToSelector:@selector(currentViewControllerShouldPop)]) { shouldPop = [currentVC currentViewControllerShouldPop]; } if(shouldPop) { dispatch_async(dispatch_get_main_queue(), ^{ [self popViewControllerAnimated:YES]; }); // 这里要return, 否则这个方法将会被再次调用 return YES; } else { // 让系统backIndicator 按钮透明度恢复为1 for(UIView *subview in [navigationBar subviews]) { if(0. < subview.alpha && subview.alpha < 1.) { [UIView animateWithDuration:.25 animations:^{ subview.alpha = 1.; }]; } } return NO; } } @end //如何使用 // 第一步:导入分类头文件 #import "UIViewController+BackBtnEventIntercept.h" // 第二步:实现代理方法,return NO 则拦截了系统的返回按钮事件 - (BOOL)currentViewControllerShouldPop { return NO; } 如何禁用系统👉右滑返回手势 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 为当前控制器禁用👉右滑返回手势 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = NO; } } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // 为其他控制器开启👉右滑返回手势 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = YES; } }
相关文章推荐
- [一句秒懂]拦截iOS系统导航栏返回按钮事件-三种方法
- IOS自定义系统导航栏:导航栏背景色、状态栏样式以及是否隐藏、拦截系统导航栏的返回点击事件
- iOS拦截导航栏返回按钮事件的正确方式(二)
- 重写系统中的UINavigationController 返回按钮的事件
- 截获导航控制器系统返回按钮的点击pop及右滑pop事件
- Android拦截、监听系统返回键事件
- 改变iOS系统自带返回按钮事件
- iOS重写系统中的UINavigationController返回按钮的事件
- 改变系统导航栏自带的返回按钮点击事件
- IOS自定义系统导航栏:导航栏背景色、状态栏样式以及是否隐藏、拦截系统导航栏的返回点击事件
- Android拦截、监听系统返回键事件
- iOS重写系统的返回按钮,捕获系统返回按钮事件
- 拦截iOS系统导航栏返回按钮事件-三种方法
- 重写系统中的UINavigationController返回按钮的事件
- iOS重写系统中的UINavigationController返回按钮的事件
- Android拦截、监听系统返回键事件
- iOS修改系统原声的返回按钮的点击事件
- Android点击MENU,返回键弹出的退出按钮退出系统方法及拦截MENU弹出菜单方法
- iOS拦截导航栏返回按钮事件的正确方式
- android监听返回按钮事件