#重写导航栏返回按钮步骤
2016-09-12 本文已影响57人
_Comma
今天突然要重写导航栏返回按钮,就顺便发上来一下,也当自己做笔记,附上详情一份
首先,建立分类,附图
![](https://img.haomeiwen.com/i2421274/cfdcfc375f92933d.png)
![](https://img.haomeiwen.com/i2421274/c8a66ab5c6ec594e.png)
分类.h,代码较少就不贴了
![](https://img.haomeiwen.com/i2421274/4758ee0ab5f7b276.png)
.m,图下面附代码
![](https://img.haomeiwen.com/i2421274/46e419a018ec8c24.png)
#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 {
for(UIView *subview in [navigationBar subviews]) {
if(subview.alpha < 1.) {
[UIView animateWithDuration:.25 animations:^{
subview.alpha = 1.;
}];
}}}return NO;}
最后只需要在重写的控制器里#import "UIViewController+BackButtonHandler.h"
然后在-(BOOL) navigationShouldPopOnBackButton方法里写自己需要的方法就好
本人菜鸟一枚,分享也是在努力学习中,有什么写的不好的希望大家多多指正,谢谢