导航控制器 UI_08(上)
重要:属性传值(向后一个界面传值)、代理传值(向前相邻的界面传值)、单例传值(不相邻的界面向前传值)
导航控制器,是用来管理多个单视图控制器的控制器,此时他管理的多个单视图控制器之前有一定的层级关系(依赖关系,即下一个页面的出现要依赖于上一个页面),导航视图控制器创建时也会自带一个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
导航控制器 UI_08(上)的更多相关文章
- iOS开发——UI进阶篇(十)导航控制器、微博详情页、控制器的View的生命周期
一.导航控制器出栈 1.initWithRootViewController本质 UIViewController *vc = [[OneViewController alloc] init]; // ...
- 关于ios导航控制器的知识总结
关于ios导航控制器的知识总结 添加了导航控制器后: 1.一个导航控制器会有一个顶部导航栏navigationbar和一个底部工具栏toolbar,它们是导航控制器navC的属性.且导航栏默认是不隐藏 ...
- IOS笔记046-UIApplication/导航控制器
UIApplication 每一个应用都有自己的UIApplication对象,而且是单例的 通过[UIApplication sharedApplication]可以获得这个单例对象 一个iOS程序 ...
- iOS导航控制器常用函数与navigationBar常用属性
导航控制器常用函数触发时机 当视图控制器的View将要出现时触发 - (void)viewWillAppear:(BOOL)animated 当视图控制器的View已经出现时触发 - (void)vi ...
- UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...
- iOS开发UINavigation——导航控制器UINavigationController
iOS开发UINavigation系列一——导航栏UINavigtionBar摘要iOS中的导航条可以附着于导航控制器之中使用,也可以在controller中单独使用,这篇博客,主要讨论有关导航栏的使 ...
- iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用
一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...
- IOS UINavigationController 导航控制器
/** 导航控制器掌握: 1.创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootVie ...
- IOS第12天(2,UINavigationController导航控制器)
****HMAppDelegate.m @implementation HMAppDelegate - (BOOL)application:(UIApplication *)application d ...
随机推荐
- Uncaught RangeError: Maximum call stack size exceeded-栈溢出
在看函数的arguments对象的时候,用了arguments.callee写了一个递归. 当执行函数func(99999)时候,直接报错了,一看,原来栈溢出了. 当执行递归运算的时候,忘记加点判断条 ...
- Python盗号原理-代码实现截屏键盘记录远程发送(不要做坏事)
这年头盗号的从出不穷,不是脱裤就是社工钓鱼.今天呢我们就以前面的几篇技术文章做铺垫,来讲一下python盗号的原理(学习用途,请勿用于违法犯罪),知己知彼方能百战不殆嘛. 脱裤我们就不多提了,无非就是 ...
- 利用create-react-app结合react-redux、react-router4构建单页应用
1.创建项目: a.全局安装create-react-app: npm install create-react-app -g b.执行create-react-app my-projectN ...
- Emacs Python 自动补全--Elpy
安装方法: 首先,安装一些依赖包: # Either of these pip install rope pip install jedi # flake8 用来检查语法错误 pip install ...
- go优化
1.安装graphviz软件,安装步骤如下::(1)安装graphvizyum install 'graphviz*' (2)查看已安装graphviz包yum list 'graphviz*' 2. ...
- 给PLSQL插上飞翔的翅膀-PLSQL优化
60-80% of database performance issues are related to poorly performing SQL,60-80%的数据库性能问题要归结于生产中糟糕的S ...
- Git之(五)远程管理
开篇就提到过,Git是一个分布式版本管理系统.但是到现在为止,我们所有的演练都是在本地Git仓库.如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里推送和拉取修改内容,但我 ...
- Mybatis源码分析之参数映射及处理ParameterHandler
ParameterHandler是用来设置参数规则的,当StatementHandler调用prepare方法之后,接下来就是调用它来进行设置参数. ParameterHandler接口: publi ...
- 非阻塞IO服务器模型
我们来考虑一个情形,你跟千千万万个玩家是魔兽世界的超级粉丝,每周末准时组团打boss.每当周末游戏服务器就亚历山大,因为起码几十万用户同时在线.如果用我们的多线程阻塞服务器作为游戏服务器是否可行呢?先 ...
- HDFS:NameNode、DataNode、SecondaryNameNode
可以一句话描述 HDFS:把客户端的大文件存放在很多节点的数据块中. HDFS设计原则: 1,文件以块(block)方式存储: 2,通过副本机制提高可靠度和读取吞吐量: 3,每个区块至少分到三台Dat ...