iOS重写系统中的UINavigationController返回按钮的事件
来源:互联网 发布:索尼耳机 知乎 编辑:程序博客网 时间:2024/05/21 06:35
以下主要帮助朋友们监听iOS系统的UINavigationController返回按钮的事件,主要有两种方案
第一种方案就是大家都能想到的,也是最简单的,代码如下:
-(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated];}
因为,点击导航条的返回按钮后,首先触发的事件就是当前页面消失,变得不可见,这确实是一个行之有效的方案。
第二种方案就是重写系统中的UINavigationController返回按钮监听事件,具体代码和实现说明如下:
1.扩展UIviewControllerUIViewController+BackButtonHandler.h#import <UIKit/UIKit.h>@protocol BackButtonHandlerProtocol <NSObject>@optional// Override this method in UIViewController derived class to handle 'Back' button click-(BOOL)navigationShouldPopOnBackButton;@end@interface UIViewController (BackButtonHandler) <BackButtonHandlerProtocol>@endUIViewController+BackButtonHandler.m文件 #import "UIViewController+BackButtonHandler.h"@implementation UIViewController (BackButtonHandler)@end2.扩展UINavigationController ,也可以继承 使用@implementation UINavigationController (ShouldPopOnBackButton)- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem*)item {if([self.viewControllers count] < [navigationBar.items count]) { return YES;}BOOL shouldPop = YES;UIViewController* vc = [self topViewController];if([vc respondsToSelector:@selector(navigationShouldPopOnBackButton)]) {shouldPop = [vc navigationShouldPopOnBackButton];}if(shouldPop) {dispatch_async(dispatch_get_main_queue(), ^{[self popViewControllerAnimated:YES];});} else {// Workaround for iOS7.1. Thanks to @boliva - http://stackoverflow.com/posts/comments /34452906for(UIView *subview in [navigationBar subviews]) {if(subview.alpha < 1.) {[UIView animateWithDuration:.25 animations:^{subview.alpha = 1.;}];}}}return NO;}@end3.测试使用#import "ViewController.h#import "UIViewController+BackButtonHandler.h"@implementation ViewController-(void) viewDidLoad{[super viewDidLoad];self.title = [NSString stringWithFormat:@"Screen-%d", self.navigationController.viewControllers.count];self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:selfaction:@selector(onNextBtn:)];}-(void) onNextBtn:(id)sender{[self.navigationController pushViewController:[ViewController new] animated:YES];}-(BOOL) navigationShouldPopOnBackButton ///在这个方法里写返回按钮的事件处理{//这里写要处理的代码 [self.navigationController popViewControllerAnimated:YES];return YES;//返回NO 不会执行}
具体怎么选择看个人需要,希望能帮助到各位!
0 0
- iOS重写系统中的UINavigationController返回按钮的事件
- iOS重写系统中的UINavigationController返回按钮的事件
- iOS重写系统的返回按钮,捕获系统返回按钮事件
- ios UINavigationController 修改返回按钮
- iOS修改系统原声的返回按钮的点击事件
- 系统UINavigationController的返回
- UINavigationController 改变返回按钮的标题
- 统一修改UINavigationController的返回按钮
- UINavigationController修改返回按钮的标题
- 设置UINavigationController的返回按钮 样式
- 改变iOS系统自带返回按钮事件
- UINavigationController生成返回按钮
- UINavigationController 返回按钮修改
- UINavigationController设置返回按钮
- iOS 设置系统返回按钮的颜色
- 重写UINavigationController实现滑动返回
- 关于UINavigationController的扩展-->进行返回按钮的中文填充。而且不会损失系统的手势返回
- UINavigationController使用时出现自定义返回按钮与系统按钮在返回时同时出现情况?
- unity NGUI tutorial scroll view
- Zabbix 一个每天都有人在踩的坑!
- android 监听网络连接状态的改变
- 如何在Swift中使用预编译宏定义
- Rose Study
- iOS重写系统中的UINavigationController返回按钮的事件
- OpenCV中使用神经网络 CvANN_MLP
- java使用filter收集http访问
- jscolor
- Java之美[从菜鸟到高手演变]系列
- Android手势识别——上下左右滑动、屏幕上下左右中区域处理
- 学习视频
- BeautifulSoap 安装和使用
- 【Codeforces Round 331 (Div 2)D】【DP 记忆化搜索 期望DP区间性质 好题】Wilbur and Trees 砍树随机从右从左概率左倒右倒的期望底面覆盖长度