Как установить невыбранный оттенок 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.
Советы?
Спасибо!
РЕДАКТИРОВАТЬ: причина, по которой я хочу отменить выбор = белый, заключается в том, что на заданном фоне серый по умолчанию затрудняет отображение значков / текста на глазах.
6 ответов
Единственным способом, которым я смог установить белый невыбранный пользовательский образ UITabBarItem, было использование следующего (белого) изображения и загрузка его в определенном режиме рендеринга.
UIImage *tabImage = [[UIImage imageNamed:@"white_tab_item"]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.tabItem.image = tabImage;
"tabItem" является выходом UITabBarItem класса
Кредиты переходят к ответу Аарона Брагера: UITabBarController невыбранный оттенок изображения значка
Вы готовы к частному использованию 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.
В iOS 10 выставляет UITabBar unselectedItemTintColor
что вы можете использовать, чтобы указать оттенок невыбранных предметов. Смотрите документы для получения дополнительной информации.
Это означает, что при настройке панели вкладок у вас есть следующие параметры оттенка:
tintColor
относится к выбранным вкладкамunselectedItemTintColor
применяется ко всем невыбранным вкладкам
Этот код для изменения выберите цвет заголовка кнопки
//// определить этот код для 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];
}
Если вы используете раскадровку, вы также можете установить оба Image
за Bar Item
а также Selected Image
за Selected Bar Item
чтобы получить неизменное изображение в tabBar
,
Должно ли это быть:
[[UITabBar appearance] setTintColor:[UIColor whiteColor]]
Взято из: iOS Пользовательский интерфейс серии: TabBar & NavBar: http://bit.ly/1ahr9Ao