UINavigationController
导航控制器是iOS中常用的多视图控制器之一,它用来管理多个视图控制器。
导航控制器所控制的视图控制器都有一定的层级关系。
UINavigationController继承于UIViewController,以栈的方式管理所控制的视图控制器,至少要有一个被管理的视图控制器。
创建的时候需要用户提供一个视图控制器作为导航控制器的一个根视图控制器。
UINavigationController通过控制入栈和出栈来展示各个视图控制器。
创建
建立导航控制器(UINavigationController)
建立一个FirstViewController,它继承于UIViewController
FirstViewController *firstVC = [[FirstViewController alloc] init];
创建导航控制器时 要指定第一个视图控制器(rootViewController)
UINavigationController *naviVC = [[UINavigationController alloc] initWithRootViewController:firstVC];
把导航控制器指定为window的根视图控制器(window的rootViewController)
[self.window setRootViewController:naviVC];
记得要内存管理
[first release];
[naviVC release];
[_window release];
- (void)dealloc
{
[_window release];
[super dealloc];
}
视图控制器切换常用方法
pushViewController:animated //进入下一个视图控制器
popViewControllerAnimated //返回上一个视图控制器
popToViewController:animated //返回到指定的视图控制器
popToRootViewControllerAnimated //返回到根视图控制器
推出第二个视图控制器
1.创建第二个视图控制器
SecondViewController *secondVC = [[SecondViewController alloc] init];
2.推出
利用viewController的属性 获得当前的导航控制器 -------- self.navigationController
调用pushViewController:animated: 方法 推出新的viewController
[self.navigationController pushViewController:secondVC animated:YES];
3.内存管理
[secondVC release];
返回
1.返回上一页
[self.navigationController popViewControllerAnimated:YES];
2.返回第一页
[self.navigationController popToRootViewControllerAnimated:YES];
3.返回某一页
获取当前栈中的某一个视图控制器(viewController)
UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:1];
返回
[self.navigationController popToViewController:vc animated:YES];
定制UINavigationBar
对于navigationBar,iOS7默认的高度是64。
如果将navigationBar的透明度关闭之后,navigationBar的高度将会变成44。
UINavigationBar 的设置
1.获得当前的navigationBar 设置是否透明
[self.navigationController.navigationBar setTranslucent:NO];
2.设置颜色
[self.navigationController.navigationBar setBarTintColor:[UIColor lightGrayColor]];
3.是否隐藏navigationController
[self.navigationController setNavigationBarHidden:NO];
NavigationItem 的设置
获取到NavigationItem
设置标题
self.navigationItem.title = @"爽死了";
设置标题位置的view
self.navigationItem.titleView = button;
设置navigation左侧的按钮(UIBarButtonItem)
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(barButtonAction:)];
设置navigation右侧的按钮
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"萌死了" style:UIBarButtonItemStyleDone target:self action:@selector(barButtonAction1:)];
将多个barButtonItem添加到数组中
UIBarButtonItem *barButton1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(barButtonAction:)];
UIBarButtonItem *barButton2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItemSearch target:self action:@selector(barButtonAction1:)];
NSArray *arr = [NSArray arrayWithObjects:barButton1, barButton2, nil];
将数组里面的所有item显示到navigationBar上
self.navigationItem.leftBarButtonItems =arr;