IOS-UINavigationController介绍
UINavigationController为导航控制器,在iOS里经常用到。
下面的图显示了导航控制器的流程。最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕;当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕。

UINavigationController有Navigation bar ,Navigation View ,Navigation toobar等组成。

声明UINavigationController
@property (strong, nonatomic) UINavigationController *navController;
self.navController = [[UINavigationController alloc] init];
在对象管理上,导航控制器使用了导航堆栈。根视图控制器在堆栈最底层,接下来入栈的是General视图控制器和Auto-Lock视图控制器。
//跳转到下一个视图
[self.navigationController pushViewController:nextViewController animated:YES]
//返回上一个试图
[self.navigationController popViewControllerAnimated:YES];
//返回某个上级试图
[self.navigationController popToViewController:viewController animated:YES]
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
//返回最顶层试图
[self.navigationController popToRootViewControllerAnimated:YES];
导航栏属性设置
//设置导航栏是否显示
setNavigationBarHidden:BOOL animated:BOOL
// 设置为不透明
self.navigationController.navigationBar.translucent = NO;
//设置导航栏的背景颜色
navController.navigationBar.barTintColor=[UIColor gap_colorFromHexRGB:@"5978ab"];
//设置导航栏标题的字体
NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName,
[UIFont systemFontOfSize:18], NSFontAttributeName, nil];
[navController.navigationBar setTitleTextAttributes:attributes];
添加UIBarButtonItem
navigationController的viewController都会有一个对应的navigationItem,该对象由viewController以懒加载的方式创建,稍后我们可以在对象中堆navigationItem进行配置,可以设置leftBarButtonItem, rightBarButtonItem, backBarButtonItem。
初始化UIBarButtonItem的方法有以下几种方法:
- (id)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;
- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action;
- (id)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(id)target action:(SEL)action;
//这个方法可以用来自定UIBarButtonItem
- (id)initWithCustomView:(UIView *)customView;
//定义左侧ButtonItem
UIButton *leftBtn=[UIButton buttonWithType:UIButtonTypeCustom];
leftBtn.frame =CGRectMake(0, 0, 24, 24);
[leftBtn setBackgroundImage:[UIImage imageNamed:@"return"] forState:UIControlStateNormal];
[leftBtn addTarget:self action:@selector(imNewViewClickLeft:) forControlEvents:UIControlEventTouchUpInside];
[self.navigationItem setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:leftBtn]];
//定义右侧ButtonItem
UIButton *rightBtn=[UIButton buttonWithType:UIButtonTypeCustom];
rightBtn.frame =CGRectMake(0, 0, 24, 24);
[rightBtn setBackgroundImage:[UIImage imageNamed:@"write"] forState:UIControlStateNormal];
[rightBtn addTarget:self action:@selector(imNewViewClickRight:) forControlEvents:UIControlEventTouchUpInside];
[self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:rightBtn]];
开启iOS7的滑动返回效果
iOS 7中在传统的左上角返回键之外,提供了右滑返回上一级界面的手势。
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
参数传递
上一级界面往下一级界面传递参数很容易,下一级界面要往上一级界面传递参数就需要使用Delegate(委托模式)。 [参考:]http://scottmaxiao.github.io/IOS-Protocol%E5%92%8CDelegate.html