ios更改UITabBarController背景以及选中背景图片的方法

不多说,直接上方案。
   一、背景图片
   1、5.0以上版本
         UIImage *image = [UIImage imageNamed:@"system_tabbar_bg.png"];
        [self.tabBar setBackgroundImage:image];
   2、5.0以下版本
         UIImage *image = [UIImage imageNamed:@"system_tabbar_bg.png"];
         NSArray *array = [self.view subviews];
         UITabBar *tabBar = [array objectAtIndex:1];
         tabBar.layer.contents = (id)image.CGImage;
 
   二、选中的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:@"UITabBarSelectionIndicat orView"])
             
               {//the v is the highlight view.
                       [self.selectedItemBgImageView removeFromSuperview];
                       [selView insertSubview:self.selectedItemBgImageView belowSubview:v];
                     
                       [v removeFromSuperview];
                     
                     
                       break;

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

你可能感兴趣的:(ios更改UITabBarController背景以及选中背景图片的方法)