UITabBarController(标签栏/底部导航栏视图控制器)
UITabBarController 本身并不会显示任何视图,如果要显示视图则必须设置其 viewControllers 属性(它默认显示 viewControllers[0])。这个属性是一个数组,它维护了所有 UITabBarController 的子控制器。
为了尽可能减少视图之间的耦合,所有的 UITabBarController 的子控制器的相关标题、图标等信息均由子控制器自己控制,UITabBarController 仅仅作为一个容器存在。
UITabBarController 生命周期
1.把子控制器都添加给 TabBarController 管理,当程序启动时它只会加载第一个添加的控制器的view。
2.切换到第二个界面。先把第一个界面的view移开,再把新的view添加上去,但是第一个view只是被移开没有被销毁。
3.重新切换到第一个界面,第一个的控制器直接 viewWillAppear,不会再执行 viewDidLoad 方法。第二个界面中的 view 移除后并没有被销毁(因为它的控制器还存在,有一个强引用引用着它)。
4.UINavigationController 通过栈来管理视图,UITabBarController 通过数组来管理视图控。
UITabBarController 常用属性
viewControllers:设置 UITabBarController 的子控制器
selectedIndex:属性可用于设置当前被选中的为哪个 Viewcontroller
selectedViewController:设置该属性可以设置当前选中的 ViewController
tabBar:设置 UITabBarController 底部标签栏背景图片、背景颜色、系统图标颜色等信息
tabBarItem:设置 UITabBarController 子控制器的相关标题、图标等信息
delegate:可以获取 TabBar 上点击事件
UITabBar
下图工具条称为UITabBar ,如果 UITabBarController 有N个子控制器,那么 UITabBar 内部就会有N 个 UITabBarItem 作为子控件与之对应。
UITabBarItem⾥面显⽰什么内容,由对应子控制器的 tabBarItem 属性来决定。
UITabBar上面显示的每一个Tab都对应着一个ViewController,我们可以通过设置 Viewcontroller 的 tabBarItem 属性来改变 Tabbar 上对应的tab显示内容。
否则系统将会根据 ViewController 的 title 自动创建一个TabBarItem,该 TabBarItem 只显示文字,没有图标。当我们自己创建 UITabBarItem 的时候,我们可以指定显示的图标和对应的文字。
UITabBar属性:
backgroundImage:设置 TabBar 背景图片
selectionIndicatorImage:设置 TabBar 选重 Item 背景图片
barTintColor:TabBar背景颜色
tintColor:TabBar选重 Item 图标颜色,只有使用系统默认图标时才有效
shadowImage:设置分隔线条
TabBar 里最多能放5个Item,如果你放6个或者以上,那么TabBar会显示前四个,然后再第五个Item的位置自动放一个 More Item来存放多出来的Items,你可以点进去选择更多的Item。
//设置tabBar背景图片
[self.tabBar setBackgroundImage:[UIImageimageNamed:@"TabBar_backGround_01"]];
//设置tabBar选重item背景图片
[self.tabBar setSelectionIndicatorImage:[UIImage imageNamed:@"TabBar_backGround"]];
//设置tabBar背景颜色
[self.tabBar setBarTintColor:[UIColorblackColor]];
//设置tabBar选重item图标颜色,只有使用系统默认图标时才有效
[self.tabBar setTintColor:[UIColorredColor]];
UITabBarItem属性:
title:标题文字
image:图标图片
selectedImage:设置选中时图标图片
badgeValue:设置提醒数字
自定义 UITabBarItem:
UITabBarItem*sevenItem = [[UITabBarItemalloc]initWithTitle:@"Seven"
image:[[UIImageimageNamed:@"TabBar"]
imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]
selectedImage:[[UIImageimageNamed:@"TabBarSe"]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
];
示例代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
OneViewController *one = [storyboard instantiateViewControllerWithIdentifier:@"OneViewController"];
UINavigationController *oneNav = [[UINavigationController alloc] initWithRootViewController:one];
TwoViewController *two = [storyboard instantiateViewControllerWithIdentifier:@"TwoViewController"];
ThreeViewController *three = [storyboard instantiateViewControllerWithIdentifier:@"ThreeViewController"];
FourViewController *four = [storyboard instantiateViewControllerWithIdentifier:@"FourViewController"];
FiveViewController *five = [storyboard instantiateViewControllerWithIdentifier:@"FiveViewController"];
SixViewController *six = [storyboard instantiateViewControllerWithIdentifier:@"SixViewController"];
SevenViewController *seven = [storyboard instantiateViewControllerWithIdentifier:@"SevenViewController"];
self.viewControllers = @[oneNav, two, three, four, five, six, seven];
UITabBarItem *oneItem = [[UITabBarItem alloc]initWithTitle:@"One"
image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
oneItem.badgeValue = @"1";
UITabBarItem *twoItem = [[UITabBarItem alloc]initWithTitle:@"Two"
image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
UITabBarItem *threeItem = [[UITabBarItem alloc]initWithTitle:@"Three"
image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
threeItem.badgeValue = @"99";
UITabBarItem *fourItem = [[UITabBarItem alloc]initWithTitle:@"Four"
image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
fourItem.badgeValue = @"100";
UITabBarItem *fiveItem = [[UITabBarItem alloc]initWithTitle:@"Five"
image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
UITabBarItem *sixItem = [[UITabBarItem alloc]initWithTitle:@"Six"
image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
UITabBarItem *sevenItem = [[UITabBarItem alloc]initWithTitle:@"Seven"
image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
// 设置 viewcontroller.tabBarItem属性
oneNav.tabBarItem = oneItem;
two.tabBarItem = twoItem;
three.tabBarItem = threeItem;
four.tabBarItem = fourItem;
five.tabBarItem = fiveItem;
six.tabBarItem = sixItem;
seven.tabBarItem = sevenItem;
// 设置标题颜色
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary
dictionaryWithObjectsAndKeys:[UIColor colorWithRed:76/255.0f green:76/255.0f blue:76/255.0f alpha:1],
NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];
// 设置标题选重颜色
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary
dictionaryWithObjectsAndKeys:[UIColor colorWithRed:83/255.0f green:187/255.0f blue:236/255.0f alpha:1],
NSForegroundColorAttributeName, nil] forState:UIControlStateSelected];
// 设置tabBar背景图片
[self.tabBar setBackgroundImage:[UIImage imageNamed:@"TabBar_backGround_01"]];
// 设置tabBar选重item背景图片
[self.tabBar setSelectionIndicatorImage:[UIImage imageNamed:@"TabBar_backGround"]];
// 设置tabBar背景颜色
[self.tabBar setBarTintColor:[UIColor blackColor]];
// 设置tabBar选重item图标颜色,只有使用系统默认图标时才有效
[self.tabBar setTintColor:[UIColor redColor]];
self.tabBar.shadowImage = [UIImage imageNamed:@""];
self.delegate = self;
}
- (BOOL)tabBarController:(UITabBarController*)tabBarController shouldSelectViewController:(UIViewController*)viewController {
if([tabBarController.viewControllers indexOfObject:viewController] == 1) {
return NO;
}
return YES;
}