如何更改ios7中非活动标签栏图标的颜色?

时间:2014-02-05 00:43:23

标签: ios iphone objective-c ios7

我想在ios7的标签栏中更改非活动图标的颜色。

我知道如何将颜色设置为选定的TabBar项目,但我不知道如何将颜色设置为非活动的TabBar项目。

有谁知道怎么做? 在此先感谢!!

这是我在appDelegate.m中的代码

//tint color for tabbar
[UITabBar appearance].barTintColor = [UIColor colorWithRed:0.077 green:0.411 blue:0.672 alpha:1.000];

//tint color for the text of inactive tabbar item.
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:        [UIColor whiteColor]} forState:UIControlStateNormal];

//tint color for the text of selected tabbar item.
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:        [UIColor orangeColor]} forState:UIControlStateSelected];

//tint color for the selected tabbar item.
[[UITabBar appearance] setTintColor:[UIColor whiteColor]];

//tint color for the inactive tabbar items.
//Question:how can I set tint color for the inactive tabbar items???

3 个答案:

答案 0 :(得分:13)

确实没有简单的方法来改变非活动图像的颜色。在故事板中似乎根本不可能做到。虽然有一个非常简单的解决方案 - 只需为项目分配一个imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal呈现模式的图像。

鉴于您的图像最初已为非活动状态着色,您可以使用以下实现创建UITabBarItem的简单自定义子类

@implementation P2TabBarItem

- (void)awakeFromNib {
    [self setImage:self.image]; // calls setter below to adjust image from storyboard / nib file
}

- (void)setImage:(UIImage *)image {
    [super setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    self.selectedImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
}

@end

在你的故事板中,将所有UITabBarItem的Class字段填充到新创建的子类名称中 - 这就是它!

答案 1 :(得分:1)

Apple不鼓励更改活动项目的色调,因为色盲用户很难区分哪个标签栏项目处于活动状态。

话虽如此,即使您仍然需要不同颜色的非活动项目图标,您也应该使用tabBarItem方法返回的图像初始化视图控制器初始化程序中的imageWithRenderingMode:属性。

这样的东西
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];

    if (self) {
        UIImage * tabImage = [[UIImage imageNamed:@"InactiveImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        UIImage * selectedTabImage = [[UIImage imageNamed:@"ActiveImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        self.tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"Item", @"Tab bar button title for 'Item'")
                                                        image:tabImage
                                                selectedImage:selectedTabImage];
    };
    return self;
}

这种方式项目将在您提供的图标之间切换,而不会在它们上添加色调。但是文本仍然会切换您通过IB或代码中的appearance代理提供的色调颜色。

答案 2 :(得分:0)

将此添加到您的UITabBarController

UITabBarItem *item0 = [self.tabBar.items objectAtIndex:0];
//unselected icon
item0.image = [[UIImage imageNamed:@"your_icon.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
//selected icon
item0.selectedImage = [UIImage imageNamed:@"your_icon.png"];