IOS 改变系统导航栏自带的返回action事件

#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;

}

时间: 2024-10-02 17:18:39

IOS 改变系统导航栏自带的返回action事件的相关文章

一些关于iOS系统导航栏与自定义导航栏的事情

关于系统导航栏是真的让人又爱又恨,爱的是苹果本身对这个控件的封装已经是很完美了,包括内存.美化.渐变动画等等,一般来说,基本上所有需求都可以满足的.但是你要知道什么东西到了中国,就会发生翻天覆地的变化,例如后台的数据并发.在国内奇葩的产品设计之下,导航栏也是面目全非,反正我看了比较著名的APP,发现他们的导航栏基本都是自定义,其中牵扯最大的问题就是导航栏自身的隐藏.颜色渐变. 其实通过APP运行时,你可以看到系统NavigationBar的分层.一个navigationBar是分很多层的,并非我

【转】iOS中设置导航栏标题的字体颜色和大小

原文网址:http://www.360doc.com/content/15/0417/11/20919452_463847404.shtml iOS中设置导航栏标题的字体颜色和大小,有需要的朋友可以参考下. 在平时开发项目的时候,难免会遇到修改导航栏字体大小和颜色的需求,一般使用自定义视图的方法,其实还存在一种方法. 方法一:(自定义视图的方法,一般人也会采用这样的方式) 就是在导航向上添加一个titleView,可以使用一个label,再设置label的背景颜色透明,字体什么的设置就很简单了.

iOS 顶部高斯模糊导航栏 + 页面内容穿越底部导航栏效果

(1)如果是使用系统导航栏则设置其translucent属性即可: [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [UIImage new]; self.navigationController.navigationB

微信公众号弹出框在IOS最新系统中点击键盘上的“完成”导致事件无法触发问题

微信公众号弹出框在IOS最新系统中点击键盘上的"完成"导致事件无法触发问题 问题描述 微信公众号中有项功能是弹框模态框,输入信息后保存操作.但是在IOS系统中发现,当输入内容后,点击键盘上的"完成"后,再点击"提交"无反应:跳过"完成"直接点击"提交"就可以正常保存 问题原因 当键盘弹出后,会将body向上弹起:但是点击"完成"后并没有将body拉回,导致点击事件不在body内而无法触发

iOS: 状态栏、导航栏、标签栏、工具栏

三种项目栏总结: 工具栏:UIToolBar 导航栏:UINavigationBar 标签栏:UITabBar UIToolBar的按钮单元为:UIBarButtonItem UINavigationBar的按钮单元为:UINavigationItem UITabBar的按钮单元为:UITabBarItem 共同属性和方法: @property(nonatomic,copy)   NSArray   *items;                    //按钮单元数组 - (void)setI

自定义iOS导航栏背景,标题和返回按钮文字颜色-----转载自gyz413977349

在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Color 方法一: [objc] view plaincopy //set NavigationBar 背景颜色&title 颜色 [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:20/255.

iOS开发 OC 导航栏 UINavigationController 工具条 UIToolBar

导航栏最常见的例子就是返回按钮的所在 在AppDelegate.m中,代码布局最开始定义窗口的时候, _window.rootViewController就应该为一个UINavigationController 这里的UINavigationController,戳进定义发现它是UIViewcontroller的子类 而之前代码布局中这里用的rootController是UIViewcontroller 所以它之中也是像之前代码布局中的UIViewcontroller一样是包含多个control

实际iOS编程中遇到的自定义导航栏按钮,导致手势返回失效的解决方法

1\在实际编程过程中往往需要自定义导航栏上面的按钮,也就用: - (instancetype)initWithCustomView:(UIView *)customView; 但用了这个方法后可能会导致iOS7,8的手势返回失效,解决方法就是在自定义的导航栏的viewDidLoad方法中添加如下代码 注意:只有用系统的导航栏,或者继承于系统的导航栏才可以用Push方法,并且自带返回手势. - (void)viewDidLoad { [super viewDidLoad]; __weak type

ios 自定义导航栏,开启侧滑返回手势

自定义一个常用ListViewController .h文件 1 #import <UIKit/UIKit.h> 2 3 @interface ListViewController : UIViewController 4 5 -(void)diquButtonClick; 6 7 @end .m文件 1 // 2 // ListViewController.m 3 // OuLianWang 4 // 5 // Created by allenariel on 15/6/24. 6 // C