主要内容: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. GC其他:引用标记-清除、复制、标记-整理的说明

    对象死亡历程 1.基本的mark&sweep是必须的,后续的都是对他的改进, 2.young代理的survivor就是使用了复制算法,避免碎片 3.还有标记整理算法(压缩),就是将存活的对象移 ...

  2. C# 获取当前屏幕DPI

    1.通过Graphics类获取 Graphics currentGraphics = Graphics.FromHwnd(new WindowInteropHelper(mainWindow).Han ...

  3. day04 Java Web 开发入门

    day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...

  4. ERP中的序列管理

    1.序列管理 序列管理主要实现系统用到序列生成规则的配置.主要包含序列配置.序列生产两个功能点. 2.术语说明 序列号:指序列中按步长递进的数字. 序列值:指按规则组合了 "拥有者.序列类型 ...

  5. 关于mysql安装到最后一步老是停留在starting server,显示无响应

    从昨天晚上到今天安装MySQL花了好长的时间,一直是在后面starting server 这部就显示无响应,查资料了解到是MySQL有残留,有些注册表文件需要手动清理,下面是具体方法. 1.先用卸载软 ...

  6. 分布式改造剧集2---DIY分布式锁

    前言: ​ 好了,终于又开始播放分布式改造剧集了.前面一集中(http://www.cnblogs.com/Kidezyq/p/8748961.html)我们DIY了一个Hessian转发实现,最后我 ...

  7. Java实验链接

    第1次实验 课堂实验内容:Java入门+Eclipse+PTA+Git+博客 实验任务书:第01次试验(安装JDK.编辑器.编写出第一个Java程序).pdf Eclipse简明教程(by郑如滨).p ...

  8. CentOS7: How to resolve curl#56 - "Recv failure: Connection reset by peer"

    Issue: When you execute Yum installation or update, you may encounter following error: Loaded plugin ...

  9. Dynamics CRM2016 Web API之删除单个查找字段值

    之前的博文中有介绍过,Web Api中的一个删除单个属性的Api但没提供查找字段的删除方法,本篇补充上,这里给出的示例代码是C#的(主要看url的拼接),看下url中最后的/$ref,这个标示表明了当 ...

  10. springMVC源码分析--AbstractHandlerMapping(二)

    上一篇博客springMVC源码分析--HandlerMapping(一)中我们简单的介绍了HandlerMapping,接下来我们介绍一下它的抽象实现类AbstractHandlerMapping