UINavigationController(导航控制器)待续:UINavigationBar(导航栏)
心得:导航控制器就是一个好比弹夹的容器,先进后出,后进先出。里面有几个常用的控制器之间的转化方法用导航控制器来进行控制器之间的转换很方便。
1、基本概念
1)继承于UIViewControler
2)相当于一个容器用来管理有层级关系的控制器
3)采用栈的方式管理所有controller,每个controller管理各自的试图。
栈:系统连续分配的内存
向栈中添加一个对象的操作称为入栈
在栈中删除一个对象的操作称为出栈
第一个入栈的对象叫做基栈
最后一个入栈的对象,叫做栈顶
当前显示的试图控制器,即为栈顶。
对象出栈、入栈的方式:后进先出,先进后出
4)提供返回上一级controller的默认button和方法
5)创建时要给导航控制器设置根控制器
2、结构,包含三个部分
1)navigationBar 导航栏
2) 内容视图
3)toolBar,因为不常用,默认是隐藏的 / 工具栏
3、常用属性和方法
属性
1)获取到在栈中最顶层的试图控制器 //1和2其实一样
topViewController
例如 id topViewController = self.navigationController.topViewController;
2)获取到在栈中当前显示的试图控制器
visibleViewController
例如(2)id visibleViewController = self.navigationController.visibleViewController;
3)在栈中当前有的试图控制器 //返回一个数组栈中有的控制器
viewControllers
例如:id viewControllersr = self.navigationController.viewControllers;
4)隐藏导航栏
navigationBarHidden
例如 self.navigationController.navigationBarHidden = YES;//YES确定隐藏
5)获取到导航栏
navigationBar
例如: id navigationBar = self.navigationController.navigationBar;
方法
1)初始化一个根视图控制器,在栈的最底层
initWithRootViewController:(UIViewController *)rootViewController;
2)往栈中压入一个新的控制器
pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
例如:[self.navigationController pushViewController:twoViewController animated:YES];
3)移除栈顶的一个控制器(返回上一个控制器也就是自己出栈)
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
例如:[self.navigationController popViewControllerAnimated:YES];
4)弹出到指定的视图控制器中,返回的数组代表要出栈中移除的对象
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
NSArray *arrayViewController = self.navigationController.viewControllers;
[self.navigationController popToViewController:arrayViewController[1] animated:YES];
5)回到根视图控制器
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
例如:[self.navigationController popToRootViewControllerAnimated:YES];//回老家
二、练习
在第二个视图控制器在添加一个UIButton实例,单击该按钮时,压入一个新的视图控制器。在该视图中添加四个按钮,依次实现,
1、压入一个新的视图控制器;
2、返回上一个视图控制器;
3、返回根视图控制器;
4、返回指定的视图控制器