Как установить 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];

Что я хочу сделать, это установить цвет оттенка кнопки НЕОБХОДИМЫЙ на белый. Я мог бы установить невыбранное изображение достаточно легко, но это работает только для моих кнопок. Я хочу сделать это и для системных кнопок. То есть, я хочу, чтобы кнопки поиска и закладок также были не выбраны - белые.

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

подсказки?

Спасибо!

РЕДАКТИРОВАТЬ: Причина, по которой я хочу unselected = белый, заключается в том, что по сравнению с моим спроектированным фоном серый цвет по умолчанию делает иконки/текст жесткими на глазах.

Ответ 1

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

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

self.tabItem.image = tabImage;

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

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

Ответ 2

Вы используете какой-то частный 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.

Ответ 3

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

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

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

Ответ 4

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

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

    }

Ответ 5

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

Ответ 6

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

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

Взято из: iOS Custom UI Series: TabBar и NavBar: http://bit.ly/1ahr9Ao