Как установить невыбранный оттенок UITabBarItem, ***включая системные элементы*** (iOS7)

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

Я работаю в 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: Причина, по которой я хочу unselected=white, заключается в том, что на моем разработанном фоне серый цвет по умолчанию делает значки/текст тяжелыми для глаз.


person Olie    schedule 26.09.2013    source источник


Ответы (6)


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

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

self.tabItem.image = tabImage;

"tabItem" является выходом UITabBarItem класса

Кредиты относятся к ответу Аарона Брагера: UITabBarController невыбранный оттенок изображения значка

person thgc    schedule 06.03.2014
comment
Это должно быть помечено как принятый ответ. Решение для частного API от @rgeorge работает, но приложение не будет принято Apple в магазин приложений. - person messinga; 15.09.2014

Готовы ли вы к использованию частного 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.

person rgeorge    schedule 04.03.2014
comment
(Я проверил, и секретное свойство unselectedTintColor секретного класса UITabBarButton не поддерживается прокси-сервером внешнего вида. К сожалению, вы не можете сделать это заранее и сделать это, вы должны применить его к фактической заполненной панели вкладок. .) - person rgeorge; 04.03.2014

В iOS 10 UITabBar предоставляет unselectedItemTintColor, который можно использовать для указания оттенка невыбранных элементов. Дополнительные сведения см. в документах.

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

  • tintColor применяется к выбранным вкладкам
  • unselectedItemTintColor применяется ко всем невыбранным вкладкам
person Daniel Galasko    schedule 22.11.2016

этот код для изменения цвета заголовка кнопки выбора

////определим этот код для 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];

    }
person Anil Sharma    schedule 03.01.2014

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

person Hugues BR    schedule 31.05.2016

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

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

Взято из серии пользовательских интерфейсов iOS: TabBar и NavBar: http://bit.ly/1ahr9Ao

person Danienllxxox    schedule 12.10.2013
comment
Вы уверены, что имеете в виду iOS7, а не iOS6? - person jimbob; 18.11.2013