Пользовательские цвета значков панели вкладок

В настоящее время я использую Xcode 5 для разработки приложения, ориентированного на список. У меня есть настраиваемый оттенок для панели вкладок, настраиваемые изображения для значков вкладок, настраиваемый оттенок для изображений значков на панели вкладок, когда он выбран, но я не могу найти, как настроить оттенок изображений значков, когда он не выбран. Прямо сейчас это просто серый цвет по умолчанию, который вы едва видите в отличие от моей зеленой панели вкладок. Я хочу сделать изображения и имена значков панели вкладок белыми.

Кто-нибудь знает, как установить оттенок изображения значков панели вкладок в Xcode 5?


person ian    schedule 24.09.2013    source источник


Ответы (7)


Вы можете попробовать это, чтобы подкрасить выбранный значок:

// Custom the tab bar
[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];

и это, чтобы подкрасить неактивный значок:

[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"item_seleted.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"item_unselected.png"]];
person Jordan Montel    schedule 24.09.2013
comment
Обратите внимание, что setFinisheSelectedImage:withFinishedUnselectedImage устарел в iOS 7. - person Matthew Burke; 24.09.2013
comment
Мэтью, если это устарело в iOS 7, есть ли другой способ сделать это или это только потому, что Apple хочет сохранить стандартные серые значки по умолчанию? - person ian; 24.09.2013
comment
@user2792129 user2792129 - да, мне потребовалось несколько минут, чтобы ввести свой ответ в ‹g/› - person Matthew Burke; 24.09.2013
comment
эй, что я могу сделать, если я не хочу использовать заголовок ... он уже на изображении. Я хочу использовать пространство заголовка, чтобы разместить значок в центре панели вкладок. - person Sourabh Bhardwaj; 10.01.2014
comment
обновленный способ — это просто [[Внешний вид UITabBar] setTintColor:[UIColor whiteColor]]; - person thailey01; 29.04.2017

Вам необходимо установить режим рендеринга для каждой вкладки (не выбранной) изображения на UIImageRenderingModeAlwaysOriginal. Итак, в своем делегате приложения получите ссылку на панель вкладок, а затем выполните итерацию по каждому элементу панели вкладок, настраивая режимы изображения.

Вероятно, есть лучший способ получить ссылку на панель вкладок, но я сделал следующее:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tbc = [sb instantiateInitialViewController];
self.window.rootViewController = tbc;
UITabBar *tb = tbc.tabBar;

Затем настройку изображения можно выполнить следующим образом:

NSArray *items = tb.items;

for (UITabBarItem *tbi in items) {
    UIImage *image = tbi.image;
    tbi.selectedImage = image;
    tbi.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
person Matthew Burke    schedule 24.09.2013
comment
Спасибо, Мэтью. Я поместил этот код в свой делегат приложения .m, и он вернул проблему, в которой говорилось, что неподдерживаемая конфигурация Plain Style не поддерживается в элементе навигации, Main.storyboard. - person ian; 24.09.2013
comment
В моем коде предполагается, что контроллер панели вкладок является начальным контроллером представления в раскадровке. Если ваше приложение настроено по-другому, это может быть источником проблемы. - person Matthew Burke; 25.09.2013
comment
Это работает, но только для одного из изображений. В основном у меня есть невыбранный и выбранный значок. Этот трюк заставил невыбранное работать, но выбранное по-прежнему представляет собой просто синюю кашу. - person Halsafar; 24.10.2013
comment
@Halsafar Это потому, что вы устанавливаете режим рендеринга только для базы image. Сделайте то же самое для selectedImage, хотя вы можете установить для него другое изображение, иначе вы не сможете отличить выбранное от невыделенного. - person Charlie Scott-Skinner; 28.07.2015

Вы можете сделать это исключительно из раскадровки без написания кода, добавив «Определяемый пользователем атрибут времени выполнения»:

  1. Выберите свой UITabViewController в раскадровке
  2. Откройте «Структура документа» и убедитесь, что вы выбрали представление «Панель вкладок» в сцене.
  3. Покажите «Инспектор удостоверений». Вы должны увидеть раздел «Определяемые пользователем атрибуты среды выполнения».
  4. Add the following:
    • Key Path: tintColor
    • Тип: Цвет
    • Значение: выберите нужный цвет.
person tebs1200    schedule 28.01.2015
comment
Хорошо знать. Но определяемые пользователем атрибуты времени выполнения — это абсолютный кошмар отладки. - person Vijay Tholpadi; 28.01.2015
comment
Что еще, кроме tintColor, вы можете ввести в Key Path? - person Bidstrup; 23.06.2015
comment
@RasmusBidstrup, все соответствующие свойства выбранного элемента IB. В нашем случае UITabBar. Итак, перейдите в Apple doc и прочитайте документацию UITabBar. - person OhadM; 07.03.2016
comment
и поправьте меня, если я ошибаюсь, но это установит цвет при выборе изображения. Он хочет изменить серый цвет элемента по умолчанию, а не выбранный цвет? - person h3dkandi; 03.06.2016

Попробуй так.. у меня сработало

В делегате приложения

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


 UITabBarController *tabBarController=(UITabBarController*)(self.window.rootViewController);
    UITabBar *tabBar=tabBarController.tabBar;
  UITabBarItem *tabBarItem1=[[tabBar items] objectAtIndex:0];//first tab bar
 [tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"yourImageSelected.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"yourImageUnselected.png"]];//image should be 30 by 30
}

беги и иди

person Tunvir Rahman Tusher    schedule 07.11.2013

Если у вас есть панель вкладок в визуальном редакторе, вы можете сделать это здесь. Выберите панель вкладок и в «Определяемые пользователем атрибуты среды выполнения» добавьте атрибут: Путь к ключу: selectedImageTintColor Тип: Значение цвета:

person Bartłomiej Jończy    schedule 12.12.2014
comment
Как колдовство. Есть ли красивая магия и для невыбранных иконок? - person Aviel Gross; 12.01.2015

Настройка пользовательской вкладки с выбранным и невыбранным изображением. Также наличие позиции tabbarItem Image Insets в центре

UITabBar *tabBar = self.tabBarController.tabBar;

UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
UITabBarItem *item2 = [tabBar.items objectAtIndex:2];
UITabBarItem *item3 = [tabBar.items objectAtIndex:3];

[item0 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue.png"]  withFinishedUnselectedImage:[UIImage imageNamed:@"iconGray.png"] ];
[item1 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue2.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"icon-2.png"]];
[item2 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue3.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"icon-3.png"]];
[item3 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue4.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"icon-4.png"]];

item0.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
item1.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
item2.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
item3.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);

** В методе viewWillAppear первого контроллера представления. **

person Ram S    schedule 26.07.2014

Поскольку setFinishedSelectedImage:withFinishedUnselectedImage устарел, я использовал измененную версию ответа Ram S, заменив:

[item0 setFinishedSelectedImage:[UIImage imageNamed:@"iconBlue.png"]  withFinishedUnselectedImage:[UIImage imageNamed:@"iconGray.png"] ];

с участием:

[item0 setImage:[[UIImage imageNamed:@"iconGray.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item0 setSelectedImage:[[UIImage imageNamed:@"iconBlue.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

Дополнительные сведения см. в разделе UITabBarItem setFinishedSelectedImage: устарело в iOS7.

person dstudeba    schedule 17.10.2014