重写系统中的UINavigationController 返回按钮的事件
- .扩展UIviewController
- UIViewController+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>
- @end
- UIViewController+BackButtonHandler.m文件
- #import "UIViewController+BackButtonHandler.h"
- @implementation UIViewController (BackButtonHandler)
- @end
- .扩展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 /34452906
- for(UIView *subview in [navigationBar subviews]) {
- if(subview.alpha < .) {
- [UIView animateWithDuration:. animations:^{
- subview.alpha = .;
- }];
- }
- }
- }
- return NO;
- }
- @end
- .测试使用
- #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 不会执行
- }
- 参考:http://blog.csdn.net/a330416020/article/details/41700821
重写系统中的UINavigationController 返回按钮的事件的更多相关文章
- 重写系统中的UINavigationController返回按钮的事件
1.扩展UIviewController UIViewController+BackButtonHandler.h #import <UIKit/UIKit.h> @protocol Ba ...
- Ionic2 下处理 Android 设备下返回按钮的事件
原文发表于我的技术博客 本文分享了 Ionic2 下处理 Android 设备下返回按钮的事件,供参考. 原文发表于我的技术博客 代码中我分享了如何捕捉 Ionic2 项目在 Android 设备下返 ...
- 如何修改 UINavigationController、UINavigationBar 中 navigationItem 左侧 “返回” 按钮的名称
如果我们从 title 为 “首页” 的页面 A 点击进入一个子页面 B,那么在页面 B 的左上角将显示一个名为 “<首页” 的按钮.假设这个页面 A 叫 “你是我天边最美的云彩”,那在页面 B ...
- iOS 自定义UINavigationController返回按钮
主要代码如下: //自定义导航栏返回按钮 self.navigationItem.leftBarButtonItem = ({ //导航栏返回背景视图 UIView *view = [[UIView ...
- 修改UINavigationController返回按钮颜色
系统默认颜色是蓝色的 视觉效果非常难看 在push进的ViewController中写 //修改UINavigationController的文字颜色 self.navigationControlle ...
- 移动端开发在iOS系统中 new Date() 返回 NaN 的问题
问题: 通过 new Date() 函数将后台返回的时间('2021-11-25')获取时间戳.在 chrome 浏览器的手机模拟器中没有出现问题,但在 iPhone 真机测试的时候,显示的结果不符合 ...
- UINavigationController 返回按钮去掉文字
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetric ...
- C#委托的用法 在C#中我想在一个方法中调用另一个按钮的事件,怎样来实现?
最开始我也不清楚,后来我是这样想了. 1.事件和委托不是一个概念,你如果是调用control的事件,可以直接在其对应的事件eventhandler上attach自己的事件方法就好了如:this.But ...
- 截获导航控制器系统返回按钮的点击pop及右滑pop事件
前几天看了@栾小布的一篇文章:Custom backBarButtonItem,在跟着做的时候我又顺便扩展了一些,写此文章的目的是为了总结一下自己所写的东西,方便以后翻看容易,同时也是自己入行iOS一 ...
随机推荐
- JavaEE Tutorials (27) - Java EE的并发工具
27.1并发基础427 27.1.1线程和进程42827.2并发工具的主要组件42827.3并发和事务42927.4并发和安全43027.5jobs并发示例430 27.5.1运行jobs示例4302 ...
- 深入理解MFC子类化
子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数.在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong ...
- Scrapy URLError
错误信息如下: 2015-12-03 16:05:08 [scrapy] INFO: Scrapy 1.0.3 started (bot: LabelCrawler) 2015-12-03 16:05 ...
- 《Java解惑》书摘
例子1:关于char数组的输出 System.out.println("H" + "a");//输出:Ha System.out.println('H' + ' ...
- 黑马程序员 Java基础<九>---> 多线程
ASP.Net+Android+IOS开发..Net培训.期待与您交流! 多线程 一.概述: 1.线程是什么 说到线程,我们就得先说说进程.所谓进程,就是一个正在执行(进行)中的程序,每一个进程执行都 ...
- ThreadLocal 在web环境下使用的边界问题
ThreadLocal 相关分析,请查看http://wangxinchun.iteye.com/blog/1884228 另外一个必须要提的点是: ThreadLocal在线程池环境下的使用. 比如 ...
- easyui combo自动高度(下拉框空白问题)
设置.combo-panel {max-height:200px;} 在用到easyui-combobox时,设置panelHeight:'auto'
- hibernate初体验
简介: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使 ...
- FMDatabase 数据库的使用
创建,插入,更新和删除:使用executeUpdate方法,而查询则用executeQuery 1.实例化FMDatabase //paths: ios下Document路径,Document为ios ...
- java实现二叉树的相关操作
import java.util.ArrayDeque; import java.util.Queue; public class CreateTree { /** * @param args */ ...