主要内容: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. promise应用及原生实现promise模型

    一.先看一个应用场景 发送一个请求获得用户id, 然后根据所获得的用户id去执行另外处理.当然这里我们完全可以使用回调,即在请求成功之后执行callback; 但是如果又添加需求呢?比如获得用户id之 ...

  2. Kibana插件sentinl使用教程

    简介 对于Kibana的一些数据我们有时候是想要对某些字段进行持续关注的,这时候通过报警的手段就可以大幅提升对这些信息状态了解的及时性及可靠性.使用sentinl插件就可以帮助我们实现这个功能. 此教 ...

  3. JConsole/JvisualVM 远程连接失败处理

    今天在使用JConsole进行远程连接时,发现IP和端口在Windows下是可以远程telnet的,但是,使用JConsole时却无法连接. 我的环境如下: Windows下运行JConsole,准备 ...

  4. 谈谈Circuit Breaker在.NET Core中的简单应用

    前言 由于微服务的盛行,不少公司都将原来细粒度比较大的服务拆分成多个小的服务,让每个小服务做好自己的事即可. 经过拆分之后,就避免不了服务之间的相互调用问题!如果调用没有处理好,就有可能造成整个系统的 ...

  5. Go 语言接口

    Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface_name in ...

  6. CRM客户关系管理系统(七)

    第七章.动态modelform功能实现  7.1.动态modelform的实现 (1)给第一列添加一个a标签 kingadmintag.py (2)kingadmin/urls.py urlpatte ...

  7. Android开发学习之路--Android Studio cmake编译ffmpeg

      最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...

  8. [boost] Windows下编译

    编译命令 32位 编译 bjam variant=release link=static threading=multi runtime-link=static -a -q bjam variant= ...

  9. DOS界面下的翻译软件制作

    准备 素材 依赖 接口 地址 参数 返回值解析 编码及测试 功能代码 运行脚本 环境变量 结果展示 英语转汉语 汉语转英语 总结 昨天看到一篇关于Linux下的桌面词典的文章,于是就想实现一个Wind ...

  10. javascript中的AJAX

    兼容地获得XMLHttpRequest对象: var xhr = null; if(window.XMLHttpRequest){ //非IE浏览器 xhr = window.XMLHttpReque ...