tabBar设置


1.UITabBar 

下方的工具条称为UITabBar ,如果UITabBarController有N个子控制器,那么UITabBar内部就会有N 个UITabBarButton作为子控件与之对应。

注意:UITabBarButton在UITabBar中得位置是均分的,UITabBar的高度为49。

在上面的程序中,UITabBarController有4个子控制器,所以UITabBar中有4个UITabBarButton,UITabBar的结构⼤大致如下图所示:

 

tabBar设置_第1张图片 

2.UITabBarButton 

UITabBarButton⾥面显⽰什么内容,由对应子控制器的tabBarItem属性来决定 

 c1.tabBarItem.title=@"消息";
 c1.tabBarItem.image=[UIImage imageNamed:@"tab_recent_nor"];

tabBar设置_第2张图片

3.有两种方式可以往UITabBarController中添加子控制器 

(1)[tb addChildViewController:c1];

(2)tb.viewControllers=@[c1,c2,c3,c4];

注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是第一个添加的控制器对应的View。




其实iOS Tabbar的可定制性非常高,我们没有必要重复造轮子,下面是笔者收集的一些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原始图标与原始选中图标,而不是系统自动填充的颜色

[objc]  view plain copy print ?
  1. // 拿到 TabBar 在拿到想应的item  
  2. UITabBar *tabBar = _tabBarController.tabBar;  
  3. UITabBarItem *item0 = [tabBar.items objectAtIndex:0];  
  4. UITabBarItem *item1 = [tabBar.items objectAtIndex:1];  
  5. UITabBarItem *item2 = [tabBar.items objectAtIndex:2];  
  6. UITabBarItem *item3 = [tabBar.items objectAtIndex:3];  
  7. // 对item设置相应地图片  
  8. item0.selectedImage = [[UIImage imageNamed:@"recognize-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];;  
  9. item0.image = [[UIImage imageNamed:@"recognize"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  
  10.    
  11. item1.selectedImage = [[UIImage imageNamed:@"life-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];;  
  12. item1.image = [[UIImage imageNamed:@"life"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  
  13.    
  14. item2.selectedImage = [[UIImage imageNamed:@"edit-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];;  
  15. item2.image = [[UIImage imageNamed:@"edit"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  
  16.    
  17. item3.selectedImage = [[UIImage imageNamed:@"setting-1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];;  
  18. item3.image = [[UIImage imageNamed:@"setting"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  


设置tabbar背景图片

[objc]  view plain copy print ?
  1. UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(00, Main_Screen_Width, 49)];  
  2. backView.backgroundColor = [UIColor redColor];  
  3. [self.tabBar insertSubview:backView atIndex:0];  
  4. self.tabBar.opaque = YES;  


设置tabbar item选中时的背景图片

1、5.0以上版本
     

[objc]  view plain copy print ?
  1. self.tabBar.selectionIndicatorImage = [UIImage imageNamed:@"system_tabbar_item_selected.png"];  

2、5.0以下版本
         首先实现如下方法:
[objc]  view plain copy print ?
  1. - (void)setNoHighlistTabBar:(UITabBarController *)tabBarController  
  2. {  
  3.     NSArray * tabBarSubviews = [tabBarController.tabBar subviews];  
  4.      
  5.     int index4SelView;  
  6.      
  7.     if(tabBarController.selectedIndex+1 > 4)  
  8.     {//selected the last tab.  
  9.         index4SelView = [tabBarSubviews count]-1;  
  10.     }  
  11.     else if([tabBarController.viewControllers count] > 5)  
  12.     {//have "more" tab. and havn't selected the last tab:"more" tab.  
  13.          
  14.          
  15.         index4SelView = [tabBarSubviews count] - 5 + tabBarController.selectedIndex;  
  16.     }  
  17.     else  
  18.     {//have no "more" tab.  
  19.          
  20.          
  21.         index4SelView = [tabBarSubviews count] -  
  22.         [tabBarController.viewControllers count] + tabBarController.selectedIndex;  
  23.     }  
  24.     if([tabBarSubviews count] < index4SelView+1)  
  25.     {  
  26.         assert(false);  
  27.         return;  
  28.     }  
  29.     UIView * selView = [tabBarSubviews objectAtIndex:index4SelView];  
  30.      
  31.     NSArray * selViewSubviews = [selView subviews];  
  32.      
  33.     for(UIView * v in selViewSubviews)  
  34.     {  
  35.         if(v && [NSStringFromClass([v class]) isEqualToString:@"UITabBarSelectionIndicatorView"])  
  36.          
  37.         {//the v is the highlight view.  
  38.             [self.selectedItemBgImageView removeFromSuperview];  
  39.             [selView insertSubview:self.selectedItemBgImageView belowSubview:v];  
  40.              
  41.             [v removeFromSuperview];  
  42.              
  43.              
  44.             break;  
  45.   
  46.         }  
  47.     }  
  48. }  


   改方法的实质就是循环tabBar的subViews, 找到tabBar中的这个view, 是一个UITabBarSelectionIndicat orView的view,然后把它替换成你自己创建的UIImageView, 上例中的self.selectedItemBgImageView.
   然后需要把UITabBarController的delegate设为self, 在tabBarController:didSelectViewController的代理方法中执行上面的方法:[self setNoHighlistTabBar:self];
  还有setSelectIndex:方法中也要执行[self setNoHighlistTabBar:self];



你可能感兴趣的:(ios)