2.根控制器
在使用导航控制器时候,首先要认识到根控制器的概念。
导航控制器的根控制器,是用户看到的第一个视图(在没有通过任何push操作之前),该视图处于导航栈的最底层,(此处说的视图,实际上应该是视图控制器。 视图控制器来控制视图的,我们看到的是视图,而不是视图控制器,所以说成:用户看到的第一个视图), 其对应的控制器成为根视图控制器,根视图控制器也是导航控制器的子控制器, 根视图控制器也被导航控制器“管理”。
应用程序中一般只有一个导航控制器,它通常作为应用程序的根视图控制器, 通过它可以切换到应用程序的各个画面(即各个视图控制器),来访问对应的功能。
根视图控制器一般是UINavigationController类型或者是其子类类型。在该类中,有一个navigationbar的属性,该属性的值即为导航控制器的对象。
通过navigationbar的方法:pushViewController可弹出来任意一个UI类型的对象,从而实现切换画面的功能。
★应用程序的根视图控制器,是应用程序启动之后,用户看到的第一个视图(视图控制器)。
3. 默认地,导航控制器会自动在当前子控制器对应的导航栏的右端增加一个返回按钮,名称是上一个视图控制器的标题, 单击它,当前的视图控制器出栈,可返回到上一级的视图控制器上,上一级的视图控制器成为当前的控制器。
4.导航控制器与其成员之间的关系
主要成员:UINavigationBar *navigationBar;管理了所有子控制器的navigationItem,显示在窗口顶部; UINavigationBar管理了一组 UINavigationItem.UIToolbar *toolbar;
工具栏,显示在窗口底部;
a.对于通过navigationbar push出来的viewcontroller,每push出来一个viewcontroller,在该viewcontroller中,都可以访问该类的navigationBar/navigationItem/navigationController属性;
其中navigationBar、nagivationController都是同一个对象,navigationController.toolbar的属性也是同一个值。也就是说对于任何一个子控制器,它能访问到的navigationBar,nagivationController,navigationController.toolbar都是同一个对象。
navigationItem是当前viewController对象的UINavigationItem对象,即上部导航栏内容可以根据需要来设计。
b.由parentViewController属性得到的对象,则是NavigationController的对象,因为,所有的viewController都是通过navigationController push出来的。
c.通过push出来的viewController,在self.navigationController.navigationBar.items中,找不到当前的navigationItem(除了rootviewcontroller).
topItem并不是当前的Item,而是当前Item的前一个。
backItem是topItem的前一个Item。
self.NavigationItem才是当前的item(UINavigationItem)。
5. 对UINavigationItem对象的leftBarButtonItems属性,显示方式: 将leftBarButtonItems对象(数组)的元素从左往右显示
对UINavigationItem对象的rightBarButtonItems属性,显示方式:将rightBarButtonItems对象(数组)的元素从右往左显示
6.items设置了若干个左侧按钮,那么通过leftBarButtonItem获得的对象既为数组中的第一个对象。
7.UINavigationItem的prompt属性,可以设置提示文字。
8.UINavigationItem的leftItemsSupplementBackButton属性,设置为YES,则显示出默认的导航返回按钮