1. .扩展UIviewController
  2. UIViewController+BackButtonHandler.h
  3.  
  4. #import <UIKit/UIKit.h>
  5. @protocol BackButtonHandlerProtocol <NSObject>
  6. @optional
  7. // Override this method in UIViewController derived class to handle 'Back' button click
  8. -(BOOL)navigationShouldPopOnBackButton;
  9. @end
  10. @interface UIViewController (BackButtonHandler) <BackButtonHandlerProtocol>
  11. @end
  12.  
  13. UIViewController+BackButtonHandler.m文件
  14.  
  15. #import "UIViewController+BackButtonHandler.h"
  16.  
  17. @implementation UIViewController (BackButtonHandler)
  18.  
  19. @end
  20.  
  21. .扩展UINavigationController ,也可以继承 使用
  22.  
  23. @implementation UINavigationController (ShouldPopOnBackButton)
  24.  
  25. - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem*)item {
  26.  
  27. if([self.viewControllers count] < [navigationBar.items count]) {
  28. return YES;
  29. }
  30.  
  31. BOOL shouldPop = YES;
  32. UIViewController* vc = [self topViewController];
  33. if([vc respondsToSelector:@selector(navigationShouldPopOnBackButton)]) {
  34. shouldPop = [vc navigationShouldPopOnBackButton];
  35. }
  36.  
  37. if(shouldPop) {
  38. dispatch_async(dispatch_get_main_queue(), ^{
  39. [self popViewControllerAnimated:YES];
  40. });
  41. } else {
  42. // Workaround for iOS7.1. Thanks to @boliva - http://stackoverflow.com/posts/comments /34452906
  43. for(UIView *subview in [navigationBar subviews]) {
  44. if(subview.alpha < .) {
  45. [UIView animateWithDuration:. animations:^{
  46. subview.alpha = .;
  47. }];
  48. }
  49. }
  50. }
  51.  
  52. return NO;
  53. }
  54.  
  55. @end
  56.  
  57. .测试使用
  58.  
  59. #import "ViewController.h
  60. #import "UIViewController+BackButtonHandler.h"
  61.  
  62. @implementation ViewController
  63.  
  64. -(void) viewDidLoad
  65. {
  66. [super viewDidLoad];
  67. self.title = [NSString stringWithFormat:@"Screen-%d", self.navigationController.viewControllers.count];
  68. self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStylePlain
  69. target:selfaction:@selector(onNextBtn:)];
  70. }
  71.  
  72. -(void) onNextBtn:(id)sender
  73. {
  74. [self.navigationController pushViewController:[ViewController new] animated:YES];
  75. }
  76.  
  77. -(BOOL) navigationShouldPopOnBackButton ///在这个方法里写返回按钮的事件处理
  78. {
  79.  
  80. //这里写要处理的代码
  81. [self.navigationController popViewControllerAnimated:YES];
  82. return YES;//返回NO 不会执行
  83.  
  84. }
  85.  
  86. 参考:http://blog.csdn.net/a330416020/article/details/41700821

重写系统中的UINavigationController 返回按钮的事件的更多相关文章

  1. 重写系统中的UINavigationController返回按钮的事件

    1.扩展UIviewController UIViewController+BackButtonHandler.h #import <UIKit/UIKit.h> @protocol Ba ...

  2. Ionic2 下处理 Android 设备下返回按钮的事件

    原文发表于我的技术博客 本文分享了 Ionic2 下处理 Android 设备下返回按钮的事件,供参考. 原文发表于我的技术博客 代码中我分享了如何捕捉 Ionic2 项目在 Android 设备下返 ...

  3. 如何修改 UINavigationController、UINavigationBar 中 navigationItem 左侧 “返回” 按钮的名称

    如果我们从 title 为 “首页” 的页面 A 点击进入一个子页面 B,那么在页面 B 的左上角将显示一个名为 “<首页” 的按钮.假设这个页面 A 叫 “你是我天边最美的云彩”,那在页面 B ...

  4. iOS 自定义UINavigationController返回按钮

    主要代码如下: //自定义导航栏返回按钮 self.navigationItem.leftBarButtonItem = ({ //导航栏返回背景视图 UIView *view = [[UIView ...

  5. 修改UINavigationController返回按钮颜色

    系统默认颜色是蓝色的 视觉效果非常难看 在push进的ViewController中写 //修改UINavigationController的文字颜色 self.navigationControlle ...

  6. 移动端开发在iOS系统中 new Date() 返回 NaN 的问题

    问题: 通过 new Date() 函数将后台返回的时间('2021-11-25')获取时间戳.在 chrome 浏览器的手机模拟器中没有出现问题,但在 iPhone 真机测试的时候,显示的结果不符合 ...

  7. UINavigationController 返回按钮去掉文字

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetric ...

  8. C#委托的用法 在C#中我想在一个方法中调用另一个按钮的事件,怎样来实现?

    最开始我也不清楚,后来我是这样想了. 1.事件和委托不是一个概念,你如果是调用control的事件,可以直接在其对应的事件eventhandler上attach自己的事件方法就好了如:this.But ...

  9. 截获导航控制器系统返回按钮的点击pop及右滑pop事件

    前几天看了@栾小布的一篇文章:Custom backBarButtonItem,在跟着做的时候我又顺便扩展了一些,写此文章的目的是为了总结一下自己所写的东西,方便以后翻看容易,同时也是自己入行iOS一 ...

随机推荐

  1. 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 ...

  2. 深入理解MFC子类化

    子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数.在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong ...

  3. Scrapy URLError

    错误信息如下: 2015-12-03 16:05:08 [scrapy] INFO: Scrapy 1.0.3 started (bot: LabelCrawler) 2015-12-03 16:05 ...

  4. 《Java解惑》书摘

    例子1:关于char数组的输出 System.out.println("H" + "a");//输出:Ha System.out.println('H' + ' ...

  5. 黑马程序员 Java基础<九>---> 多线程

    ASP.Net+Android+IOS开发..Net培训.期待与您交流! 多线程 一.概述: 1.线程是什么 说到线程,我们就得先说说进程.所谓进程,就是一个正在执行(进行)中的程序,每一个进程执行都 ...

  6. ThreadLocal 在web环境下使用的边界问题

    ThreadLocal 相关分析,请查看http://wangxinchun.iteye.com/blog/1884228 另外一个必须要提的点是: ThreadLocal在线程池环境下的使用. 比如 ...

  7. easyui combo自动高度(下拉框空白问题)

    设置.combo-panel {max-height:200px;} 在用到easyui-combobox时,设置panelHeight:'auto'

  8. hibernate初体验

    简介: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使 ...

  9. FMDatabase 数据库的使用

    创建,插入,更新和删除:使用executeUpdate方法,而查询则用executeQuery 1.实例化FMDatabase //paths: ios下Document路径,Document为ios ...

  10. java实现二叉树的相关操作

    import java.util.ArrayDeque; import java.util.Queue; public class CreateTree { /** * @param args */ ...