UINavigationController便于pop的category
效果图:
这个category是为了方便UINavigationController用于跳转到指定的控制器当中,用于跳级,如果pop的控制器不存在,会直接提示:
category源码:
UINavigationController+POP.h 与 UINavigationController+POP.m
// // UINavigationController+POP.h // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h> @interface UINavigationController (POP) - (NSArray *)popToViewControllerClass:(Class)viewControllerClass animated:(BOOL)animated; @end
// // UINavigationController+POP.m // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "UINavigationController+POP.h" @implementation UINavigationController (POP) - (NSArray *)popToViewControllerClass:(Class)viewControllerClass animated:(BOOL)animated { UIViewController *controller = nil;
for (UIViewController *oneController in self.viewControllers) {
if ([oneController isMemberOfClass:viewControllerClass]) {
controller = oneController;
break;
}
}
if (controller == nil) { NSLog(@"%s:%s:%d 要pop的控制器指针为空", __FILE__, __func__, __LINE__); return nil; } return [self popToViewController:controller animated:animated]; } @end
源码:
RootViewController.m
// // RootViewController.m // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "RootViewController.h" #import "SecondViewController.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad { [super viewDidLoad]; // 设置导航栏样式以及标题以及view的背景色 [self titleTextAttributes:[self createTitleTextAttributes:[UIColor redColor]]]; self.title = @"First ViewController"; self.view.backgroundColor = [UIColor whiteColor]; // 添加手势 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapEvent)]; [self.view addGestureRecognizer:tap]; } - (void)tapEvent { [self.navigationController pushViewController:[SecondViewController new] animated:YES]; } - (NCTitleAttribute *)createTitleTextAttributes:(UIColor *)color { NCTitleAttribute *titleAttribute = [NCTitleAttribute new]; titleAttribute.titleFont = [UIFont fontWithName:@"HelveticaNeue-Thin" size:20.f]; titleAttribute.titleColor = color; return titleAttribute; } @end
SecondViewController.m
// // SecondViewController.m // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "SecondViewController.h" #import "ThirdViewController.h" @interface SecondViewController () @end @implementation SecondViewController - (void)viewDidLoad { [super viewDidLoad]; // 设置导航栏样式以及标题 [self titleTextAttributes:[self createTitleTextAttributes:[UIColor redColor]]]; self.title = @"Second ViewController"; self.view.backgroundColor = [UIColor redColor]; // 添加手势 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapEvent)]; [self.view addGestureRecognizer:tap]; } - (void)tapEvent { [self.navigationController pushViewController:[ThirdViewController new] animated:YES]; } - (NCTitleAttribute *)createTitleTextAttributes:(UIColor *)color { NCTitleAttribute *titleAttribute = [NCTitleAttribute new]; titleAttribute.titleFont = [UIFont fontWithName:@"HelveticaNeue-Thin" size:20.f]; titleAttribute.titleColor = color; return titleAttribute; } @end
ThirdViewController.m
// // ThirdViewController.m // YouXianMing // // Created by YouXianMing on 14-9-20. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import "ThirdViewController.h" #import "RootViewController.h" @interface ThirdViewController () @end @implementation ThirdViewController - (void)viewDidLoad { [super viewDidLoad]; // 设置导航栏样式以及标题 [self titleTextAttributes:[self createTitleTextAttributes:[UIColor redColor]]]; self.title = @"Third ViewController"; self.view.backgroundColor = [UIColor cyanColor]; // 添加手势 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapEvent)]; [self.view addGestureRecognizer:tap]; } - (void)tapEvent { [self.navigationController popToViewControllerClass:[RootViewController class] animated:YES]; } - (NCTitleAttribute *)createTitleTextAttributes:(UIColor *)color { NCTitleAttribute *titleAttribute = [NCTitleAttribute new]; titleAttribute.titleFont = [UIFont fontWithName:@"HelveticaNeue-Thin" size:20.f]; titleAttribute.titleColor = color; return titleAttribute; } @end
需要注意的一些地方: