UITabBarController是IOS中很常用的一个viewController。UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的container viewController中。可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例子就是QQ、微信、微博等应⽤。
.创建
在storyboard中的模拟我们就不多说了,直接进入直接代码的编写。(模拟微博的tabBarController进行编写)
我们选择在ApplicationDelegate中的 applicationDidFinishLaunching:方法中进行创建,因为前面已经说到了UITabBarController作为整个程序的rootViewController,并且要在显示程序的windows之前创建好。具体的创建步骤:
(1)初始化UITabBarController
(2)设置UIWindow的rootViewController为UITabBarController
(3)创建相应的子控制器(viewcontroller)
(4)把子控制器添加到UITabBarController
eg://创建TabBarControllor
CustomTabBarController *tabBarController = [[CustomTabBarController alloc] init];
tabBarController.tabBar.tintColor = [UIColor orangeColor];
//设置窗口的根视图控制器
self.window.rootViewController = tabBarController;
//创建tabBar上管理的每个界面
//1.创建主页
HomeViewController *homeVC = [[HomeViewController alloc] init];
homeVC.view.backgroundColor = [UIColor whiteColor];
。。。。。。
//将创建的homeVC添加到tabBarController上
tabBarController.viewControllers = @[homeVC, msgVC, discoverVC, profileVC]; //viewControllers实际上就是一个数组,只需要把想传进去的viewController放进这个数组就可以了
注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是第一个添加的控制器对应的View。
实际效果:
.UITabBar
下方的工具条称为UITabBar ,如果UITabBarController有N个子控制器,那么UITabBar内部就会有N 个UITabBarButton作为子控件与之对应。
(P.S.系统中没有放出UITabBarButton这个类,但是我们可以用『NSClassFromString(@"UITabBarButton"』)
这里值得一提的是:UITabBarButton在UITabBar中得位置是均分的,UITabBar的默认高度为49,并且没有办法更改。
.UITabBarItem
UITabBar上面显示的每一个Tab都对应着一个ViewController,我们可以通过设置viewcontroller.tabBarItem属性来改变tabbar上对应的tab显示内容。否则系统将会根据viewController的title自动创建一个,该tabBarItem只显示文字,没有图像。
eg:homeVC.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"主页" image:[UIImage imageNamed:@"tabbar_home"] selectedImage:[[UIImage imageNamed:@"tabbar_home_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
.在UITabBar中间添加一个btn
这个方法会在以下的情况下自动调用,如果想要手动调用的话应该调用『layoutIfNeeded』:
.一个视图A被添加到另外一个视图B
.一个视图的frame改变
1 - (void)layoutSubviews{ 2 [super layoutSubviews]; 3 4 CGFloat avgWidth = self.frame.size.width / 5; 5 6 NSInteger index = 0; 7 for (UIView *item in self.subviews) { 8 if ([item isKindOfClass:NSClassFromString(@"UITabBarButton")]) { 9 item.frame = CGRectMake(index * avgWidth, item.frame.origin.y, avgWidth, item.frame.size.height); 10 11 index++; 12 if (index == 2) { 13 _addBtn.frame = CGRectMake(index * avgWidth, 3, avgWidth, 44); 14 [self addSubview:_addBtn]; 15 index++; 16 } 17 } 18 } 19 }