主要内容: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. git报错:'fatal:remote origin already exists'怎么处理?附上git常用操作以及说明。

    git添加远程库的时候有可能出现如下的错误, 怎么解决? 只要两步: 1.先删除 $ git remote rm origin 2.再次执行添加就可以了. ---------------------- ...

  2. numpy.squeeze()是干啥的

    例子: a = 3 print np.squeeze(a) # 输出3 a = [3] print np.squeeze(a) # 输出3 a = [[3]] print np.squeeze(a) ...

  3. python学习之路网络编程篇(第四篇)- 续

    Memcache简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...

  4. 匿名函数lambda

    匿名函数的定义 在python中,匿名函数的定义如下: func =lambda x:x+1 #定义匿名函数,x为传参,x+1为返回值,func为函数名 res = func(10) #执行匿名函数 ...

  5. 查找Mysql的安装路径

    在安装Mysql后,却忘记路径了!!!!!!!! 查找的方法:进入Mysql命令行输入,   show variables like "%char%"; 红色部分就是Mysql的安 ...

  6. Docker的名字空间

    名字空间是 Linux 内核一个强大的特性.每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样.名字空间保证了容器之间彼此互不影响. pid 名字空间 不同用户的进程就是 ...

  7. 阅读源码(III)

    往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> Medium上有一篇文章Why You Don't Deserve That Dream Developer Jo ...

  8. Linux中MySQL忽略表中字段大小写

    linux 下,mysql 的表面默认是区分大小写的,windows 下默认不区分大小写,我们大多数在windows 下开发,之后迁移到linux(特别是带有Hibernate的工程),可以修改配置是 ...

  9. Useful command for Docker

    Copy file from Container to Host: docker cp <containerId>:/file/path/within/container /host/pa ...

  10. python用openpyxl操作excel

    python操作excel方法 1)自身有Win32 COM操作office但讲不清楚,可能不支持夸平台,linux是否能用不清楚,其他有专业处理模块,如下 2)xlrd:(读excel)表,xlrd ...