繁体   English   中英

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

[英]How to change color of inactive tab-bar icons in 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???

确实没有简单的方法来改变非活动图像的颜色。 在故事板中似乎根本不可能做到。 虽然有一个非常简单的解决方案 - 只需使用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字段填充到新创建的子类名称 - 就是这样!

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

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

就像是

- (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代理提供的色调颜色。

将此添加到您的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"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM