一、导航控制器:管理控制器的控制器,主要管理右层级关系的控制器。继承自UIViewController, 以栈的⽅式管理所 控制的视图控制器,⾄少要有⼀个被管理的视图控制器,这个控制器我们称作导航控制器的根视图控制器。
// NavigationController 虽然是管理控制器的,但本身不可见,故其View也管理对应的控制器的view
// NavigationController的view整体上可以分为三个部分:
1, NavigationBar 导航条,默认是透明的,在竖屏下的高度是44
2, toolBar 工具条,默认是隐藏的
3,contentView:真正存放视图控制器view的view。其在导航条透明的情况下是和整个屏幕等大的。如果不透明,toolBar会隐藏,那么contentView从导航条下面开始放置。
4,导航控制器不能推出导航控制器
5,导航控制器在管理视图的时候采用栈的数据结构进行管理,对应的数据容器是NSArray。视图控制器入栈采用的是push,出栈采用的是pop
6, navigationController自带一个导航条,在使用时,每个被控制的视图控制器都可以定制属于自己的导航条。当切换的时候会销毁上一个控制的内容,以展示当前的导航条内容
二、navigationController属性,⽗类中的属性,每个在栈中的控制器,都能通 过此属性,获取⾃⼰所在的UINavigationController对象。
三、入栈和出栈
pushViewController:animated //进⼊下⼀个视图控制器
popViewControllerAnimated: //返回上⼀个视图控制器
popToViewController:animated //返回到指定的视图控制器
popToRootViewControllerAnimated //返回到根视图控制器
四、常用的属性
viewControllers //所有处于栈中的控制器
topViewController //位于栈顶的控制器
visibleViewController //当前正在显⽰的控制器
navigationBar //导航条
五、定制UINavigationBar
1, barTintColor //设置导航条的颜⾊
2, setBackgroundImage:forBarMetrics: //导航条加背景图⽚
3, UINavigationBar除了能定义⾃⾝的样式外,还管理⼀组 UINavigationItem。
1)、 与UINavigationController相似 ,UINavigationBar也是以栈的⽅式管 理⼀组UINavigationItem。提供push和pop操作item。 每个视图控制器都有⼀个navigationItem 属性。navigationItem中设 置的左按钮、右按钮、标题等,会随着控制器的显⽰,也显⽰到 navigationBar上。
2)、UINavigationItem的一些属性
title //标题
self.title 和 self.navigationItem.title 的区别是:如果项目中既用到了navigationController,又用到了tabBarController。用self.title会同事设置两个标题, 用self.navigationItem.title只会设置navigation的标题
titleView //标题视图
leftBarButtonItem //左按钮
rightBarButtonItem //右按钮
UIBarButtonItem属定义了UINavigationItem上按钮的触发事件,外观等
-initWithBarButtonSystemItem:target:action:
-initWithTitle:style:target:action:
-initWithImage:style:target:action: tintColor