今天突然要重写导航栏返回按钮,就顺便发上来一下,也当自己做笔记,附上详情一份
首先,建立分类,附图
分类.h,代码较少就不贴了
.m,图下面附代码
#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方法里写自己需要的方法就好
本人菜鸟一枚,分享也是在努力学习中,有什么写的不好的希望大家多多指正,谢谢
网友评论