1、导航控制器和标签控制器都属于容器控制器;
a)容器控制器本身不负责向用户展示有意义的内容,只是负责管理子控制器,管理控制器的展示和子视图控制器视图之间的切换
b)容器类控制器本身也是视图控制器,都是UIViewController的子类。
2、导航控制器的基本概念
a) 导航控制器(UINavigationController)是用来管理子控制器的切换的大管家
b)导航控制器它本身不显示视图内容,而是管理子控制器的视图显示,它提供了一个可以在这些视图之间切换显示的结构。
3、导航控制器的显示结构
a) 导航栏(Navigation bar)
b) 子控制器的根视图(Custom content)
c) 导航工具栏(Navigation toolbar),默认隐藏,较少使用
4、导航控制器的组织结构
a)组织结构指的并不是子控制器视图在屏幕上的布局方式,而是指容器视图控制器以什么样的基本数据结构描述和组织这些视图控制器。
b)导航控制器组织子视图的方式:将它的子控制器组织在一个树结构中。
c)树中的每一个视图控制器定义了它可能的下一级视图控制器和唯一能返回的上一级视图控制器。
d)导航控制器的栈结构管理特点:先进后出,后进先出
5、导航控制器的创建
//创建视图控制器
RootViewController *rootVC = [[RootViewController alloc]init];
//把控制器添加的窗⼝口上去显⽰
UINavigationController *navCtrl = [[UINavigationController alloc]initWithRootViewController:rootVC];
//设置为根视图
self.window.rootViewController = navCtrl;
6、导航控制器的常用方法
//初始化⼀一个根视图控制器,在栈的最底层
- (id)initWithRootViewController:(UIViewController *)rootViewController;
//压⼊入到⼀一个新的视图控制器中,在栈中最顶层,可以选择是否需要动画效果
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
//弹出到上一个控制器,可以选择是否需要动画
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
//弹出到指定的视图控制器中,可以选择是否需要动画效果
- (NSArray *)popToViewController:(UIViewController *)viewController animated: (BOOL)animated;
//回到根视图控制器,可以选择是否需要动画效果
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
7、标签控制器的基本概念
a) UITabBarController 和 UINavigationController一样是用来管理视图控制器的。
b) UINavigationController 是用来管理视图控制器之间的导航,UITabBarController是管理固定的几个视图控制器,子控制器是并列的。可以任意切换显示。
c) 很多应用程序都使用 UITabBarController 来做整体的布局。
注意:TabBar只能显示5个TabItem,如果超过5个则会自动生成个 More的标签显示剩余的Tab,这些Tab可以通过编辑显示在 UITabBar上
8、标签控制器的结构
与导航控制器不同,标签控制器是用数组管理子视图控制器,并且子视图之间是平等关系。导航控制器所管理的视图控制器之间是上下级关系
9、UITabBar的常用设置
UITabBarController *tabBarController = [[UITabBarController alloc] init];
//设置tabBar的背景图⽚
tabBarController.tabBar.backgroundImage = [UIImage imageNamed:@"navbg.png"];
tabBarController.tabBar.tintColor = [UIColor grayColor];
//设置选中item的图⽚颜⾊
tabBarController.tabBar.selectedImageTintColor = [UIColor redColor];
//设置选中item后,显⽰在此item下⾯的图⽚
tabBarController.tabBar.selectionIndicatorImage = [UIImage imageNamed:@"选中.png"];
注意:在实际项目开发中,导航控制器作为标签控制器的子视图来使用的情况非常多