2014-02-05 6 views
9

Я хочу изменить цвет неактивных значков на панели вкладок в 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??? 
+0

Я считаю, что оттенок цветом на панели вкладок является цветом неактивных вкладок, потому что существует также 'selectedImageTintColor'. Я не уверен на 100% об этом, но без фактического тестирования. – erdekhayser

+0

@foriinrangeawesome Вы неверны. Apple действительно испортила это. «SelectedImageTintColor» игнорируется, а неактивные вкладки всегда серые, без API для его изменения. – rmaddy

+0

Apple должна действительно пересмотреть свою документацию – erdekhayser

ответ

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 

В раскадровку, заполнить поле класса всех ваших UITabBarItems к новое имя подкласса - вот и все!

+1

Я даже не удивлен, что вы не можете просто определить неактивный оттенок цвета, это Apple в конце концов ... –

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 в коде.

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"]; 
Смежные вопросы