2013-09-26 2 views
19

(ПРИМЕЧАНИЕ: Я вижу, есть несколько аналогичных вопросов по SO, но ни один из них, похоже, не справляется с моей конкретной проблемой для изменения невыбранного внешнего вида как пользовательских, так и системных UITabBarItems.)Как установить невыбранный оттенок UITabBarItem ***, включая системные элементы *** (iOS7)

Я работаю в iOS7. У меня есть UITabBar с несколькими кнопками. Некоторые из них - мои кнопки, некоторые - системные кнопки. Пример:

UITabBarItem *searchButton = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemSearch tag: navSearchItem]; 
UITabBarItem *bookMkButton = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemBookmarks tag: navBookmarksItem]; 
UITabBarItem *homeButton = [[UITabBarItem alloc] initWithTitle: @"Home"  image: [self tabBarImageNamed: @"home-tab"]  tag: navHomeItem]; 
UITabBarItem *setingButton = [[UITabBarItem alloc] initWithTitle: @"Settings" image: [self tabBarImageNamed: @"settings-tab"] tag: navSettingsItem]; 

navTabBar.items = @[ searchButton, homeButton, bookMkButton, setingButton]; 

я могу установить выбранные кнопки оттенок достаточно легко, с:

[[UITabBar appearance] setSelectedImageTintColor: MY_FAVORITE_COLOR]; 

Я могу установить невыбранный цвет текста кнопки на белый:

[[UITabBarItem appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], UITextAttributeTextColor, nil] 
             forState: UIControlStateNormal]; 

То, что я хочу необходимо установить UNSELECTED Изображение кнопки изображение оттенок до белого. Я мог бы установить невыбранное изображение достаточно легко, но это работает только для моих кнопок. Я хочу сделать это и для системных кнопок. То есть, я хочу, чтобы мой поиск & кнопок закладок также был невыбранным - белый.

Я уверен, что Apple будет жаловаться, если я попытаюсь воссоздать их значки, чтобы создавать пользовательские кнопки. Документы довольно специфичны, что мы не должны делать ничего отдаленно напоминающего иконки Apple.

Подсказки?

Спасибо!

EDIT: Причина, по которой я хочу исключить = белый, заключается в том, что по сравнению с моим спроектированным фоном серый цвет по умолчанию делает иконки/текст жесткими на глазах.

ответ

-4

Должна ли она быть:

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

Взято из: IOS серии Custom UI: TabBar & NavBar: http://bit.ly/1ahr9Ao

+4

это работает только с iOS 6, но не iOS 7 –

+0

уверен, что вы имеете в виду iOS7, а не iOS6? – jimbob

0

этот код, чтобы изменить кнопку Выбрать цвет заголовка

//// определить их код для ios7

#define SYSTEM_VERSION_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 

#define SYSTEM_VERSION_GREATER_THAN(v)    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

#define SYSTEM_VERSION_LESS_THAN(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 

#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 





if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")){ 

    NSLog(@"ios77777"); 


[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont   fontWithName:@"HelveticaNeue-Bold" size:10.0f], 
                 NSForegroundColorAttributeName : [UIColor redColor] 



} 

     forState:UIControlStateNormal]; 

    } 
3

Вы готовы для некоторых приватных использовать API?

ли это когда-нибудь после того, как панель вкладок была заселена:

for (UIView *v in self.tabBar.subviews) 
    if ([NSStringFromClass(v.class) isEqual:@"UITabBarButton"]) 
    [v performSelector:@selector(_setUnselectedTintColor:) 
       withObject:[UIColor whiteColor]]; 

Обычные предупреждения о частной API применяются: Apple предпочли бы вы не сделать это; если он сломается, вы получите обе части; и т. д.

Пример кода не особо скрыт в отношении обзора App Store. Apple поймает его, как представлено. Добавьте свои любимые методы скрытности.

Работает, по крайней мере, с iOS 7.0.1 и 7.1.

+0

(я проверил, и секретное свойство unselectedTintColor секретного класса UITabBarButton не поддерживается прокси-сервером внешнего вида. Поэтому, к сожалению, вы не можете сделать это раньше времени и сделать это, вы должны применить его к фактической заполненной вкладке bar.) – rgeorge

12

Единственный способом, которым я был успешным в установлении пользовательского невыделенного UITabBarItem изображения к белому был с помощью следующего (белого) изображения и загрузить его с конкретным режимом рендеринга

UIImage *tabImage = [[UIImage imageNamed:@"white_tab_item"] 
         imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

self.tabItem.image = tabImage; 

«TabItem» будучи UITabBarItem на выходе из класса

Кредиты идут на ответ Аарон Brager в: UITabBarController unselected icon image tint

+1

Это должно быть отмечено как принятый ответ. Частное решение api от @rgeorge работает, но приложение не будет принято apple в appstore. – messinga

+0

Не работает ... – Chris

0

Если вы используете раскадровки вы также можете установить как Image для Bar Item и Selected Image для Selected Bar Item, чтобы получить неизмененное изображение в tabBar.

2

В прошивке 10 UITabBar выставляет unselectedItemTintColor, которые вы можете использовать, чтобы указать оттенок невыбранных элементов. См. docs для получения дополнительной информации.

Это означает, что при настройке панели вкладок у вас есть следующие варианты оттенка:

  • tintColor относится к выбранным вкладкам
  • unselectedItemTintColor относится ко всем невыбранным вкладкам
Смежные вопросы