导航控制器ZJBaseNaviController+导航栏返回按钮点击事件拦截
#import <UIKit/UIKit.h>
@interface ZJBaseNaviController : UINavigationController
@end
#import "ZJBaseNaviController.h"#import "UIViewController+BackButtonHandler.h"@interface ZJBaseNaviController ()<UIGestureRecognizerDelegate>@end
@implementation ZJBaseNaviController#pragma mark - 初始化/** 只加载一次 */+(void)load{ UINavigationBar *navBar = [UINavigationBar appearance]; // 导航栏颜色 navBar.barTintColor = [UIColor whiteColor]; // 导航栏是否有透明效果 navBar.translucent = NO; // 导航栏分割线 navBar.shadowImage = [UIImage new]; // 导航栏字体颜色 NSMutableDictionary * param = [NSMutableDictionary new]; [param setObject:[UIFont systemFontOfSize:17] forKey:NSFontAttributeName]; [param setObject:[UIColor redColor] forKey:NSForegroundColorAttributeName]; [navBar setTitleTextAttributes:param];}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // 滑动手势 if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.interactivePopGestureRecognizer.delegate = self; }}#pragma mark - UIGestureRecognizerDelegate-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ //是否出发手势 return self.childViewControllers.count > 1;}
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{ if(self.childViewControllers.count>0){ viewController.navigationController.title = @""; viewController.hidesBottomBarWhenPushed = YES; CGRect tempFrame = CGRectMake(0, 0, 40, 40); UIButton * button = [[UIButton alloc] initWithFrame:tempFrame]; [button setImageEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; [button setImage:[UIImage imageNamed:@"arrow_left"] forState:UIControlStateNormal]; [button addTarget:self action:@selector(backBeforViewController) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem * leftItem = [[UIBarButtonItem alloc] initWithCustomView:button]; viewController.navigationItem.leftBarButtonItem = leftItem; } [super pushViewController:viewController animated:animated];}-(void)backBeforViewController{ BOOL shouldPop = YES; UIViewController * tempViewController = [self topViewController]; if([tempViewController respondsToSelector:@selector(navigationShouldPopOnBackButton)]) { shouldPop = [tempViewController navigationShouldPopOnBackButton]; } if(shouldPop){ [self popViewControllerAnimated:YES]; }}@end
阅读更多
- 自定义封装导航栏左右按钮点击事件和特定风格的控制器供多个控制器继承—— 当很多导航页面有相似的导航条时
- 截获导航控制器系统返回按钮的点击pop及右滑pop事件
- IOS自定义系统导航栏:导航栏背景色、状态栏样式以及是否隐藏、拦截系统导航栏的返回点击事件
- IOS自定义系统导航栏:导航栏背景色、状态栏样式以及是否隐藏、拦截系统导航栏的返回点击事件
- 拦截iOS系统导航栏返回按钮事件-三种方法
- 谈一谈拦截导航控制器返回事件(下)——AOP
- 谈一谈拦截导航控制器返回事件(上)——OPP
- iOS拦截导航栏返回按钮事件的正确方式(二)
- iOS拦截导航栏返回按钮事件的正确方式
- 改变系统导航栏自带的返回按钮点击事件
- [一句秒懂]拦截iOS系统导航栏返回按钮事件-三种方法
- 自定义导航控制器返回按钮以及隐藏返回按钮的文字
- iOS 隐藏导航控制器返回按钮
- 自定义导航控制器返回按钮
- IOS中自定义返回按钮点击事件响应视图过大解决办法
- 自定义返回按钮点击事件(双击退出程序)
- Android7.0 修改下载应用,点击返回按钮事件由弹出菜单改为直接退出下载应用
- swift导航栏导航按钮添加多个按钮事件
- Android点击MENU,返回键弹出的退出按钮退出系统方法及拦截MENU弹出菜单方法
- 4000 AndroidStudio Toolbar 滑动隐藏以及返回按钮点击事件