之前说过,多控制器管理方式有两种,一种是UINavigationController,一种是UITabBarController。前者已经讲解过。现在来讲解后者:UITabBarController。
跟UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是QQ、微信等应用。
UITabBarController的组成结构。以下是官方文档的介绍。
A standard tab bar interface consists of the followingobjects:
1.A UITabBarControllerobject
2.One contentview controller object for each tab
3.An optionaldelegate object
就是说:一个UITabBarController视图包含:1个UITabBarController对象;每个标签对应的子控制器;1一个代理对象。
UITabBarController存储控制器原理:和UINavigationController相同,也是一个栈来存储其中的子控制器。不同点是,当切换控制器的时候,上一个控制器不会被销毁。如图:(图很丑啊,见谅)
使用UITabBarController:
UITabBarController的创建方式跟UINavigationController是一样的,在这里就不再过多赘述。(在这里使用代码创建)
UITabBarController的使用步骤
1.初始化UITabBarController
2.设置UIWindow的rootViewController为UITabBarController
3.根据具体情况,通过addChildViewController方法添加对应个数的子控制器
上代码:(创建空项目)
在项目中New Files…三个控制器(将来作为UITabBarController的子控制器)
以下代码是创建UITabBarController,并初始化子控制器,将UITabBarController设置为窗口根控制器。(AppDelegate.m)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
//创建子控制器,并设置不同的颜色
HXOneViewController *oneVC = [[HXOneViewController alloc] init];
oneVC.view.backgroundColor = [UIColor redColor];
HXTwoViewController *twoVC = [[HXTwoViewController alloc] init];
twoVC.view.backgroundColor = [UIColor greenColor];
HXThreeViewController *threeVC = [[HXThreeViewController alloc] init];
threeVC.view.backgroundColor = [UIColor blueColor];
// 创建UITabBarController
UITabBarController *tabbarC = [[UITabBarController alloc] init];
// 向UITabBarController添加自控制器
// 1.一个一个添加
// [tabbarC addChildViewController:oneVC];
// [tabbarC addChildViewController:twoVC];
// [tabbarC addChildViewController:threeVC];
// 2.一次性添加
tabbarC.viewControllers = @[oneVC, twoVC, threeVC];
//设置窗口主视图
self.window.rootViewController = tabbarC;
//使窗口可见
[self.window makeKeyAndVisible];
return YES
}
运行效果:(底部的标签栏(UITabBar)上的三种颜色的框代表三种不同的控制器,点击相应的框会切换到对应的控制器)
解析和UITabBarController相关的控件:
1. UITabBar:
1>如果UITabBarController有N个子控制器,那么UITabBar内部就会有N个UITabBarButton作为子控件
2>如果UITabBarController有3个子控制器,那么UITabBar的结构大致如下图所示注意:UITabBarItem里面封装了UITabBarButton,UITabBarButton里面显示什么内容,由对应子控制器的tabBarItem属性决定,这里就不再赘述UITabBarItem的属性了。可自学。
到这里我们已经把两个管理控制器的控制器基本上讲解完了。但是在实际开发项目中并不是单独使用某个控制器去管理其他控制器的。也就是说UITabBarController和UINavigationController经常会一起使用来管理控制器,开发项目。