导航控制器 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 ...
随机推荐
- 关于一些基础的Java问题的解答(一)
学习一门语言基础是非常重要的,因此本文总结了一些常见的Java基础问题的解答,希望可以帮到大家. 1. 九种基本数据类型的大小,以及他们的封装类. 9种基本数据类型 基本类型 包装类型 大小 bool ...
- Parallel.For 平行算法 使用
之前看到Parallel的用法,觉得很高深,很腻害,今天专门抽空研究了一下,发现还是很easy的. .NET Framework 4.0 新加的功能,所以4.0之前的无法使用哦. 下面介绍一下,Par ...
- JavaScript正则表达式模式匹配(5)——特殊字符匹配、换行模式
特殊字符匹配 var pattern=/\[/; // 用\符号来转义正则里的特殊字符才能匹配 var str='['; alert(pattern.test(str)); 换行模式 var patt ...
- 前端性能优化之-dns预解析
预解析的实现: 1. 用meta信息来告知浏览器, 当前页面要做DNS预解析:<meta http-equiv="x-dns-prefetch-control" conten ...
- comtypes加word 2013批量将pdf转换为doc
office 2013很强大. import os import sys import re import comtypes.client wdFormatPDF = 17 def covx_to_p ...
- Linux: Check version info
一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@localhost ~]# cat /proc/version Linux version 2.6.1 ...
- Jedis分片Sentinel连接池实验
Jedis分片Sentinel连接池实验 1.起因 众所周知,Redis官方HA工具Sentinel已经问世很久了,但令人费解的是,Jedis官方却迟迟没有更新它的连接池.到目前Maven库中最新的2 ...
- Google图片加载库Glide的简单封装GlideUtils
Google图片加载库Glide的简单封装GlideUtils 因为项目里用的Glide的地方比较多,所有简单的封装了以下,其实也没什么,就是写了个工具类,但是还是要把基础说下 Glide的Githu ...
- 一起聊聊什么是P问题、NP问题、NPC问题
概念 P问题:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题.通常NOI和NOIP不属于P类问题,我们常见到的一些信息奥赛的题目都是P问题. NP问题:可以在多项式的 ...
- thinkpad彻底消除"触摸键盘"图标
输入“服务”,进入“查看本地服务”,找到“Touch Keyboard and Handwriting Panel Service”, 将其启动类型改为“禁用”,这样的话重启电脑之后也不会自动启动这触 ...