Objective-C - 更改不活动的UITabBar图像颜色

时间:2014-04-06 20:38:36

标签: cocoa-touch

我试图找到一种方法来改变UITabBar上非活动图像的色调颜色 - 这是我当前进展的图像 enter image description here

我试图将灰色图像的颜色改为当前任何其他颜色,没有任何运气。这是我正在使用的代码:

[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
[[UITabBar appearance] setTintColor:[UIColor whiteColor]];

我一直在谷歌搜索某种方式来完成这项工作,但我没有运气。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

如果您正试图在UITabBar上显示实际图像,请使用以下代码:

tabBarItem.image = [tabImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

如果您想以原始状态显示所选图像,请使用以下内容:

tabBarItem.selectedImage = [tabImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

这两个方法可以替代已弃用的方法setFinishedSelectedImage:withFinishedUnselectedImage:

答案 1 :(得分:1)

您可以为每个标签栏按钮一次执行此操作,如下所示:

UIImage *rawImage = [[myVC tabBarItem] image];
[[myVC tabBarItem] setFinishedSelectedImage:[rawImage imageWithColorMask:[UIColor grayColor]] withFinishedUnselectedImage:[rawImage imageWithColorMask:[UIColor greenColor]]];

编辑: 如果您想在iOS 7之前支持iOS,则上面是最佳选择,但不推荐使用此方法。对于iOS 7及更高版本,您只需将标签栏项目的图像设置为一个图像,该图像指定您不希望iOS为您进行颜色屏蔽,如下所示:

// assuming you have a UIImage ready to go...
myImage = [myImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[[myVC tabBarItem] setSelectedImage:myImage];

答案 2 :(得分:0)

我认为这是一个两步过程:

1)使用UIImageRenderingModeAlwaysTemplate创建图像

tabBarItem.image = [tabImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

2)子类UIViewController并贡献给-(void)tintColorDidChange

- (void) tintColorDidChange {

  switch (self.tintAdjustmentMode) {

    case UIViewTintAdjustmentModeNormal: {
        tabBarItem.tintColor = [UIColor cyanColor];
    }
      break;

    case UIViewTintAdjustmentModeDimmed: {
        tabBarItem.tintColor = [UIColor magentaColor];
    }
      break;

    case UIViewTintAdjustmentModeAutomatic: {
        tabBarItem.tintColor = [UIColor yellowColor];
    }
      break;
  }
}
只要系统更改了tintColor,

-(void)tintColorDidChange就会触发。