1.UITabBar
下方的工具条称为UITabBar ,如果UITabBarController有N个子控制器,那么UITabBar内部就会有N 个UITabBarButton作为子控件与之对应。
注意:UITabBarButton在UITabBar中得位置是均分的,UITabBar的高度为49。
在上面的程序中,UITabBarController有4个子控制器,所以UITabBar中有4个UITabBarButton,UITabBar的结构⼤大致如下图所示:
2.UITabBarButton
UITabBarButton⾥面显⽰什么内容,由对应子控制器的tabBarItem属性来决定
c1.tabBarItem.title=@"消息"; c1.tabBarItem.image=[UIImage imageNamed:@"tab_recent_nor"];
3.有两种方式可以往UITabBarController中添加子控制器
(1)[tb addChildViewController:c1];
(2)tb.viewControllers=@[c1,c2,c3,c4];
注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是第一个添加的控制器对应的View。
其实iOS Tabbar的可定制性非常高,我们没有必要重复造轮子,下面是笔者收集的一些tabbar的常用设置,希望对大家有所帮助。
iOS7设置如下:
[self.tabBarController.tabBarsetSelectedImageTintColor:[UIColor greenColor]];
ios8中如下设置:
self.tabBar.tintColor=[UIColor greenColor];
消除tabbar边框
在appdelegate的程序启动处:
[[UITabBar appearance] setShadowImage:[[UIImage alloc]init]];
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc]init]];
设置tabbar item原始图标与原始选中图标,而不是系统自动填充的颜色
- // 拿到 TabBar 在拿到想应的item
- UITabBar *tabBar = _tabBarController.tabBar;
- UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
- UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
- UITabBarItem *item2 = [tabBar.items objectAtIndex:2];
- UITabBarItem *item3 = [tabBar.items objectAtIndex:3];
- // 对item设置相应地图片
- item0.selectedImage = [[UIImage imageNamed:@"recognize-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];;
- item0.image = [[UIImage imageNamed:@"recognize"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
- item1.selectedImage = [[UIImage imageNamed:@"life-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];;
- item1.image = [[UIImage imageNamed:@"life"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
- item2.selectedImage = [[UIImage imageNamed:@"edit-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];;
- item2.image = [[UIImage imageNamed:@"edit"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
- item3.selectedImage = [[UIImage imageNamed:@"setting-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];;
- item3.image = [[UIImage imageNamed:@"setting"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
设置tabbar背景图片
- UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, Main_Screen_Width, 49)];
- backView.backgroundColor = [UIColor redColor];
- [self.tabBar insertSubview:backView atIndex:0];
- self.tabBar.opaque = YES;
设置tabbar item选中时的背景图片
1、5.0以上版本
- self.tabBar.selectionIndicatorImage = [UIImage imageNamed:@"system_tabbar_item_selected.png"];
2、5.0以下版本
- - (void)setNoHighlistTabBar:(UITabBarController *)tabBarController
- {
- NSArray * tabBarSubviews = [tabBarController.tabBar subviews];
- int index4SelView;
- if(tabBarController.selectedIndex+1 > 4)
- {//selected the last tab.
- index4SelView = [tabBarSubviews count]-1;
- }
- else if([tabBarController.viewControllers count] > 5)
- {//have "more" tab. and havn't selected the last tab:"more" tab.
- index4SelView = [tabBarSubviews count] - 5 + tabBarController.selectedIndex;
- }
- else
- {//have no "more" tab.
- index4SelView = [tabBarSubviews count] -
- [tabBarController.viewControllers count] + tabBarController.selectedIndex;
- }
- if([tabBarSubviews count] < index4SelView+1)
- {
- assert(false);
- return;
- }
- UIView * selView = [tabBarSubviews objectAtIndex:index4SelView];
- NSArray * selViewSubviews = [selView subviews];
- for(UIView * v in selViewSubviews)
- {
- if(v && [NSStringFromClass([v class]) isEqualToString:@"UITabBarSelectionIndicatorView"])
- {//the v is the highlight view.
- [self.selectedItemBgImageView removeFromSuperview];
- [selView insertSubview:self.selectedItemBgImageView belowSubview:v];
- [v removeFromSuperview];
- break;
- }
- }
- }