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:@"UITabBarSelectionIndicatorView"])
       
        {//the v is the highlight view.
            [self.selectedItemBgImageView removeFromSuperview];
            [selView insertSubview:self.selectedItemBgImageView belowSubview:v];
           
            [v removeFromSuperview];
           
           
            break;

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

posted @ 2013-08-15 15:29  ubersexual  阅读(611)  评论(0编辑  收藏  举报