文档章节

iOS重写系统的返回按钮,捕获系统返回按钮事件

风了个1
 风了个1
发布于 2015/09/05 11:25
字数 184
阅读 7993
收藏 4

#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


#import "UIViewController+BackButtonHandler.h"


@implementation UIViewController (BackButtonHandler)


@end


@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 < 1.) {

[UIView animateWithDuration:.25 animations:^{

subview.alpha = 1.;

}];

}

}

}


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;

}


本文转载自:

风了个1
粉丝 3
博文 76
码字总数 16670
作品 0
杭州
程序员
私信 提问
加载中

评论(2)

qinyang123
qinyang123
5
yoyoso
yoyoso
lz有没有发现在iOS8.1的系统上显示有问题?我用的自定义按钮,点返回的时候自定义返回按钮消失,显示了默认的返回按钮。但是如果回到桌面再打开应用,自定义返回按钮又能显示了
驰骋工作流引擎-CCMobile与安卓、IOS集成过程中的问题与解决方案

CCMobile与安卓、IOS集成过程中的问题与解决方案 前言: CCMobile(2019版本)是CCFlow&JFlow 的一款移动端审批的产品。系统基于mui框架开发,是一款可以兼容Android与IOS的移动端工作流审批...

孟娟
06/26
75
0
定制iOS 7中的导航栏和状态栏

由于种种原因,申请了一个开源中国的帐号,也许会由于我的不耐心,不会亲自去一步步的写博文,但准备把自己看到的好的,都转载过来,就当时资源的存储,也算是一种推广吧。 iOS 7 教程:定制...

谁家的阿毛
2013/11/21
1K
0
开发中常见问题集锦

这篇文章是专门用来记录开发中一些常见的BUG以及常用的零碎知识点,我会隔一段时间更新内容 1.重复调用2次loadView和viewDidLoad 最好不要在UIViewController的loadView方法中改变状态栏的可...

长平狐
2013/03/28
178
0
UITextField 文本字段控件-IOS开发

进入本文之前建议你认真读一读我的另一篇博文:《UIControl IOS控件编程—IOS开发》http://blog.csdn.net/iukey/article/details/7300412 这样会起到事半功倍效果。 再就是用到UITextField,...

junwong
2012/03/05
1K
1
论坛源码推荐(4月28日):列表项目的波浪效果 兼容iOS 6与iOS 7的自定义导航条

Flow 基于手势的教程框架,以用户熟悉的手势来驱动用户界面。灵感来自于Facebook Paper。 测试环境:Xcode 5.0,iOS 4.3以上 AMWaveTransition 带有表格的视图控制器切换效果,点击每个栏目会...

mingxun
2014/04/29
584
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部