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



 UINavigationController 
在管理视图的时候用的栈的数据结构,进入下一界面入栈,此时要创建下一级页面视图;返回上一级界面就是出栈,此时会把当前视图界面销毁
======================================================
AppDelegate.m
   
//创建单是图控制器FirstVC

   
FirstViewController
*firstVC =
[[FirstViewController
alloc]init];

//创建导航控制器对象

UINavigationController
*navigationVC =
[[UINavigationController
alloc]initWithRootViewController:firstVC];

   
self.window.rootViewController
=
navigationVC;
   
[firstVC retain];
   
[navigationVC release];
——————————————————————————————
FirstViewController.m
 1.引入下一级的头文件
#import
"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];
}
——————————————————————————————
SecondViewController.m
当界面切换的时候,来年各个视图A和视图B的消失的过程
 从A
Push  B(从前到后)

 A(viewWillDisAppear:) -> B(viewWillAppear:)
-> A(viewDidAppear:) -> B(viewDidAppear:)

 从B pop 到
A(从后到前)
 
B(viewWillDisAppear:) -> A(viewWillAppear:) ->
B(viewDidAppear:) -> A(viewDidAppear:)
视图将要出现的时候触发,此方法主要用来刷新UI界面
-
(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]; 
}
self.navigationItem.title
=
@"SecondVC";
第三个控制图省略和上面第三个一样。
——————————————————————————
ForthViewController.m//第四部分实行跳转pop或push
布局部分和第一、二、三个一致(在此省略)
-
(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

一个导航控制器只有一个导航条,也就是说所有的自控制器公用一个导航条。
======================================================
下接:
UIPassValue页面传值——UI-第八天(下):

欢迎学习本文,未经博主许可,禁止转载!

导航控制器 UI_08(上)的更多相关文章

  1. iOS开发——UI进阶篇(十)导航控制器、微博详情页、控制器的View的生命周期

    一.导航控制器出栈 1.initWithRootViewController本质 UIViewController *vc = [[OneViewController alloc] init]; // ...

  2. 关于ios导航控制器的知识总结

    关于ios导航控制器的知识总结 添加了导航控制器后: 1.一个导航控制器会有一个顶部导航栏navigationbar和一个底部工具栏toolbar,它们是导航控制器navC的属性.且导航栏默认是不隐藏 ...

  3. IOS笔记046-UIApplication/导航控制器

    UIApplication 每一个应用都有自己的UIApplication对象,而且是单例的 通过[UIApplication sharedApplication]可以获得这个单例对象 一个iOS程序 ...

  4. iOS导航控制器常用函数与navigationBar常用属性

    导航控制器常用函数触发时机 当视图控制器的View将要出现时触发 - (void)viewWillAppear:(BOOL)animated 当视图控制器的View已经出现时触发 - (void)vi ...

  5. UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解

    (1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...

  6. iOS开发UINavigation——导航控制器UINavigationController

    iOS开发UINavigation系列一——导航栏UINavigtionBar摘要iOS中的导航条可以附着于导航控制器之中使用,也可以在controller中单独使用,这篇博客,主要讨论有关导航栏的使 ...

  7. iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

    一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...

  8. IOS UINavigationController 导航控制器

    /** 导航控制器掌握: 1.创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootVie ...

  9. IOS第12天(2,UINavigationController导航控制器)

    ****HMAppDelegate.m @implementation HMAppDelegate - (BOOL)application:(UIApplication *)application d ...

随机推荐

  1. Linux 在线模拟器

    最近在学习Linux的一些命令的使用,但是很久之前装的Linux虚拟机被删掉了,又不想为了练习几个命令折腾一遍虚拟机.所以,就尝试地搜了一下,看看有没有在线的Linux模拟器可以使用,只要可以练习一下 ...

  2. html学习中

    Html常用标签一 <body style="background-color:red;"> Body 标签 Style 属性 background-color:red ...

  3. MySQL CURTIME() 函数

    定义和用法 CURTIME() 返回当前的时间. 语法 CURTIME() 实例 下面是 SELECT 语句: SELECT NOW(),CURDATE(),CURTIME() 结果如下所示: NOW ...

  4. 防止SpringMVC拦截器拦截js等静态资源文件

    SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决: 方案一.拦截器中增加针对静 ...

  5. win 8.1 64位彻底删除王码98

    安全模式 C:\Windows\SysWOW64\ 删除:winwb98.IME和winwb98.MB 注册表: 找到王码五笔相关的项.一般在最下面的以字母E开头的文件夹.全部删除. HKEY_LOC ...

  6. LeakCanary使用手册

    demo 一个非常简单的 LeakCanary demo: https://github.com/liaohuqiu/leakcanary-demo 开始使用 在 build.gradle 中加入引用 ...

  7. Android View框架总结(二)View焦点

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52263256 前言:View框架写到第六篇,发现前面第二篇竟然没有, ...

  8. java的overload与override

    概括 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现.重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个 ...

  9. iOS开发之音频播放AVAudioPlayer 类的介绍

    主要提供以下了几种播放音频的方法: 1. System Sound Services System Sound Services是最底层也是最简单的声音播放服务,调用 AudioServicesPla ...

  10. Android初级教程获取手机系统联系人信息

    在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...