重要:属性传值(向后一个界面传值)、代理传值(向前相邻的界面传值)、单例传值(不相邻的界面向前传值)
导航控制器,是用来管理多个单视图控制器的控制器,此时他管理的多个单视图控制器之前有一定的层级关系(依赖关系,即下一个页面的出现要依赖于上一个页面),导航视图控制器创建时也会自带一个View,之不过此时它上面有来年各个子视图,一个是contentView
,一个是navigationBar
管理的多个单视图控制器自带的view都添加到contenView上面,导航控制器在完成页面之间的跳转的时候是一个不断地创建和销毁的过程

在管理视图的时候用的栈的数据结构,进入下一界面入栈,此时要创建下一级页面视图;返回上一级界面就是出栈,此时会把当前视图界面销毁
//创建单是图控制器FirstVC
FirstViewController
*firstVC =
[[FirstViewController
alloc]init];
//创建导航控制器对象
UINavigationController
*navigationVC =
[[UINavigationController
alloc]initWithRootViewController:firstVC];
self.window.rootViewController
=
navigationVC;
[firstVC retain];
[navigationVC release];
"SecondViewController.h"
(void)viewWillAppear:(BOOL)animated{
NSLog(@"%s",__FUNCTION__);
(void)viewDidAppear:(BOOL)animated{
NSLog(@"%s",__FUNCTION__);
(void)viewWillDisappear:(BOOL)animated{
NSLog(@"%s",__FUNCTION__);
(void)viewDidDisappear:(BOOL)animated{
NSLog(@"%s",__FUNCTION__);
(void)viewDidLoad {
[super
viewDidLoad];
//制定背景颜色,消除跳转的重影现象
self.view.backgroundColor = [UIColor whiteColor];
UIButton
*button1 =
[UIButton
buttonWithType:UIButtonTypeSystem];
button1.frame = CGRectMake(80, 100, 150, 40) ;
[button1 setTitle:@"欢迎进入下一个页面" forState:UIControlStateNormal];
//添加关联事件
[button1 addTarget:self action:@selector(handlePush : ) forControlEvents:(UIControlEventTouchUpInside)];
button1.backgroundColor = [UIColor greenColor];
[self.view
addSubview:button1];
- (void)configureCommonProerty{
//设置导航条的颜色
self.navigationController.navigationBar.barTintColor
=
[UIColor
cyanColor];
//控制导航条的毛玻璃效果是否打开,影响的是contentView上视图的布局
self.navigationController.navigationBar.translucent
=
YES;
//设置导航条是否隐藏
self.navigationController.navigationBarHidden
=
NO;
//设置导航条内容颜色(标题,视图边框的颜色)
//设置导航条Back的颜色
self.navigationController.navigationBar.tintColor
=
[UIColor
redColor];
//设置导航条的背景图片
//44的高时图片只能早导航条上
//64的高时,导航条和状态栏都有
//其他情况拉伸或者压缩
[self.navigationController.navigationBar
setBackgroundImage:[UIImage
imageNamed:@"95"]
forBarMetrics:UIBarMetricsDefault];
}
//针对于每个界面单独定制导航条上的内容
- (void)customNavigationItemAppearance{
//1.配置导航条显示的标题
self.navigationItem.title
=
@"FirstVC";
//2.配置导航条的标题视图
UISegmentedControl
*segmentView =
[[UISegmentedControl
alloc]initWithItems:@[@"所有通话",@"未接来电"]];
self.navigationItem.titleView
=
segmentView;
[segmentView release];
//3.0配置导航条的左右按钮
//self
为试图控制器对象
UIBarButtonItem
*leftItem =
[[UIBarButtonItem
alloc]initWithTitle:@"添加"
style:UIBarButtonItemStylePlain
target:self
action:@selector(handleLeftItem
:)];
self.navigationItem.leftBarButtonItem
=
leftItem;
[leftItem release];
UIBarButtonItem
*rightItem =
[[UIBarButtonItem
alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
target:self
action:@selector(handleRight
:)];
self.navigationItem.rightBarButtonItem
=
rightItem;
[rightItem release];
#pragma mark
实现左barButton的方法
-
(void)handleLeftItem
: (UIBarButtonItem
*)leftItem{
NSLog(@"添加");
}
#pragma mark 实现右BarbuttonItem
的方法
-
(void)handleRight
: (UIBarButtonItem
*)rightItem{
NSLog(@"垃圾桶");
(void)handlePush
: (UIButton
*)push{
//
NSLog(@"欢迎进入第一个页面");
//2.创建SecondViewController对象
SecondViewController
*secondVC =
[[SecondViewController
alloc]init];
//3.获取导航视图控制器并完成跳转
//
self.navigationController
获取当前视图的导航控制器对象
//第一个参数:待跳转的试图控制器对象
//
第二个参数:是否需要动画
[self.navigationController
pushViewController:secondVC
animated:YES];
//释放
[secondVC release];
(void)handlePush :
(UIButton
*)push{
//
NSLog(@"欢迎进入第一个页面");
//2.创建SecondViewController对象
SecondViewController
*secondVC =
[[SecondViewController
alloc]init];
//3.获取导航视图控制器并完成跳转
self.navigationController
获取当前视图的导航控制器对象
//第一个参数:待跳转的试图控制器对象
//
第二个参数:是否需要动画
[self.navigationController
pushViewController:secondVC
animated:YES];
//释放
[secondVC release];
Push B(从前到后)
A(viewWillDisAppear:) -> B(viewWillAppear:)
-> A(viewDidAppear:) -> B(viewDidAppear:)
从B pop 到
A(从后到前)
B(viewWillDisAppear:) -> A(viewWillAppear:) ->
B(viewDidAppear:) -> A(viewDidAppear:)
(void)viewWillAppear:(BOOL)animated{
NSLog(@"%s",__FUNCTION__);
- (void)viewDidAppear:(BOOL)animated{
NSLog(@"%s",__FUNCTION__);
- (void)viewWillDisappear:(BOOL)animated{
NSLog(@"%s",__FUNCTION__);
}
//视图已经消失的时候触发
- (void)viewDidDisappear:(BOOL)animated{
NSLog(@"%s",__FUNCTION__);
(void)viewDidLoad {
[super
viewDidLoad];
//制定背景颜色,消除跳转的重影现象
self.view.backgroundColor = [UIColor whiteColor];
UIButton
*button1 =
[UIButton
buttonWithType:(UIButtonTypeSystem)];
button1.frame = CGRectMake(80, 100, 150, 40);
[button1 setTitle:@"欢迎进入下一个页面" forState:UIControlStateNormal];
button1.backgroundColor = [UIColor yellowColor];
[button1 addTarget:self action:@selector(handlePush : ) forControlEvents:(UIControlEventTouchUpInside)];
[self.view
addSubview:button1];
- (void)handlePush : (UIButton *)push{
ThirdViewController
*thirdVC =
[[ThirdViewController
alloc]init];
[self.navigationController
pushViewController:thirdVC
animated:YES];
[thirdVC release];
=
@"SecondVC";
(void)handelePush : (UIButton *)push{
1.返回上一级界面
也是有导航视图控制器完成
[self.navigationController popViewControllerAnimated:YES];

2.返回到导航控制器的根视图控制器对象
[self.navigationController popToRootViewControllerAnimated:YES];

3.返回到指定的视图控制器
第一步获取导航视图控制器所有单视图控制器
NSArray
*controllerArray =
[self.navigationController
viewControllers];
第二步返回到指定的视图控制器
[self.navigationController
]
animated:YES];

说明:
导航控制器是通过栈的形式来管理子控制器的(先进后出)
显示在导航控制器上得view永远是栈顶控制器的view