UITabBarController
2016-05-22 本文已影响111人
Barry_小闪
标签栏控制器是容器视图控制器,专门用来管理视图控制器。管理的视图控制器之间是平级的。
使用的时要注意:我们一般会使用标签栏控制器去管理导航控制器,但是不会使用导航控制器去管理标签栏控制器;导航控制器不能去管理导航控制器。
目录
- 定制tabBar
- tabBarItem定制
定制tabBar
- 定制tabBar需要拿到标签栏控制器(任何可以拿到标签栏控制器的地方都可以来定制)
1.设置是否有透明度
[tabBarController.tabBar setTranslucent:NO];
2.设置tabBar的颜色
[tabBarController.tabBar setBarTintColor:[UIColor yellowColor]];
3.设置填充颜色(镂空部分的颜色 -- 标签的文字的选中颜色)
[tabBarController.tabBar setTintColor:[UIColor redColor]];
4.设置背景图片
[tabBarController.tabBar setBackgroundImage:[UIImage imageNamed:@"tabbg"]];
5.在需要的时候隐藏tabBar
self.tabBarController.tabBar.hidden = YES;
tabBarItem定制
第一种方式定制tabBarItem
(1)设置标签正常状态的图片(如果选中图片和没有选中的图片的样式是一样,只是颜色不一样,只需呀设置tabBar的填充颜色就可以了,可以不用去设置选中的图片)
[nav1.tabBarItem setImage:[UIImage imageNamed:@"image"]];
(2)设置标签选中状态的图片
[nav1.tabBarItem setSelectedImage:[[UIImage imageNamed:@"faxian_d"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
(3)设置标签名
[nav1.tabBarItem setTitle:@"发现"];
(4)给不同状态设置标签字体和颜色
[nav1.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17], NSForegroundColorAttributeName:[UIColor greenColor]} forState:UIControlStateNormal];
//字体只有设置正常状态的字体有,选中状态的字体和正常状态下的字体一样
[nav1.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13], NSForegroundColorAttributeName:[UIColor orangeColor]} forState:UIControlStateSelected];
(5)同时设置所有的标签的字体和颜色(如果已经单独设置过字体和颜色后,使用这个方法再去设置就无效)
[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13], NSForegroundColorAttributeName:[UIColor purpleColor]} forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13], NSForegroundColorAttributeName:[UIColor blackColor]} forState:UIControlStateSelected];
6.将视图控制器对象交给标签栏控制器去管理
//添加单个NavigationController
[tabBar addChildViewController:vc];
//添加多个NavigationController
tabBarC.viewControllers = @[nav1, nav2, nav3, nav4, nav5];
7.选中的标签下标(默认是0)
//(可以获取也可以修改当前选中的下标的值)
tabBarC.selectedIndex = 1;
8.将标签栏控制器作为window的根视图控制器
self.window.rootViewController = tabBarC;
第二种方法.
- 获取到tabBar上显示的所有的item,然后设置对应的属性(已经将需要标签栏控制管理的视图控制交给标签栏控制器管理后去完成)
(1)获取所有的tabBarItem
UITabBarController * tabBarController = (UITabBarController *)_window.rootViewController;
NSArray * tabBaritems = tabBarController.tabBar.items;
```
设置第三个item的属性
```objc
UITabBarItem * item = tabBaritems[2];
//设置正常状态的图片
[item setImage:[UIImage imageNamed:@"zhuanti_u"]];
[item setSelectedImage:[[UIImage imageNamed:@"zhuanti_d"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
常用小方法
获取根视图控制器,TabBarController
//获取根视图控制器,TabBarController
ZBTabBarController *tabBarC = (ZBTabBarController *)[[UIApplication sharedApplication].keyWindow rootViewController];
修改tabBar选中的视图&获取tabBar的子视图控制器
//获取根视图控制器
ZBTabBarController *tabBarC = (ZBTabBarController *)[[UIApplication sharedApplication].keyWindow rootViewController];
//修改tabBar选中的视图
tabBarC.selectedViewController = tabBarC.viewControllers[0];
//获取tabBar的子视图控制器
UINavigationController *na = tabBarC.viewControllers[0];