2009-04-26 4 views

ответ

4

SDK не делает это легким, но это технически возможно. Apple, по-видимому, считает это частью своего видения последовательного внешнего вида.

UITabBar является подклассом UIView. Вы всегда можете подклассифицировать и реализовать свой собственный -drawRect:

Это не тривиальная задача, однако вы должны по существу повторно реализовать класс с нуля или вы рискуете некоторыми странными побочными эффектами.

1

iOS 5.0 исправляет эту проблему, но решение находится под NDA. Посмотрите UITabBar в своей документации на легкий способ сделать то, что вы хотите сделать.

18

В IOS5 UITabBar имеет свойство selectedImageTintColor, которое делает все, что вам нужно.

+4

Устаревший в iOS 8. – KPM

+1

@KPM, я вижу, это устарело, но что мы должны использовать вместо этого? Это все еще работает на iOS 8, для чего это стоит. –

+1

См. Ответ Кайла ниже. http://stackoverflow.com/a/18996564/364446 – KPM

11

Это очень легко

Создание пользовательского класса UITabBarController и -(void)viewDidLoad метода добавьте следующую строку:

[[self tabBar] setSelectedImageTintColor:[UIColor greenColor]]; 
+0

, но это изменит цвет текста, а не всю область выделения. Любой способ добиться этого? –

+3

Устаревший в ios 8 – codercat

3

Я искал способ, чтобы установить выбранный цвет текста в UITabBarItem и нашли мертвый простой метод, используя протокол UIAppearance.

Извините за ужасные цвета!

+0

UITextAttributeTextColor устарел. Какая альтернатива? –

+0

Я думаю, что это NSForegroundColorAttributeName –

+0

Спасибо ... u r a genius .. –

14

В iOS 7 это просто оттенок цвета. Одним из способов достижения этой цели может быть подкласс UITabBarViewController, установить пользовательский класс в раскадровке, и в вашем viewDidLoad способе наследника tabBarVC добавить следующее:

[[self tabBar] setTintColor:[UIColor redColor]]; 
+1

Я постоянно, как и я: «Почему мне нужно создать подкласс для такой незначительной вещи, как смена цветов?». Хороший вопрос, почему f * не просто автоматически наследует tintColor из родительского представления? И почему настройка интерфейса не делает ничего? –

+0

Как использовать SelectedImageTintColor в ios 8 – codercat

+1

[self.tabBarController.tabBar setTintColor: [UIColor redColor]]; также будет делать трюк. –

5

Поскольку UITextAttributeTextColor осуждается в прошивке 7, вы должны использовать:

[UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor greenColor]} forState:UIControlStateNormal];  
[UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor purpleColor]} forState:UIControlStateSelected]; 
+0

Это работает как шарм в iOS 8 и 9. – AndyH

49

Обновление сентября 2017: Прошло два года с тех пор я написал этот ответ, и так как он регулярно получать upvotes, я должен сказать, что это, вероятно, худшее из возможных ответов на этот вопрос, он подвержен ошибкам, литий kely, чтобы ломаться из-за обновлений iOS, трудно отлаживать и т. д., поэтому, пожалуйста, не делайте то, что я написал, и применяйте лучшие решения, такие как подклассификация UITabBar или UITabBarController. Благодарю.

Вы можете сделать это, установив для вас UITabBar атрибут «tintColor» (Key Path).

  1. Выберите UITabBar в контуре документа. (NOT Контроллер с желтым значком.)
  2. Выберите «Инспектор идентификации» в области «Утилиты».
  3. Нажмите «+» в «Пользовательские атрибуты времени выполнения».
  4. Добавить «tintColor» Key Path типа «Цвет» и цвет, который вы хотите.

Это должно сделать это. Вы можете проверить его на скриншот ниже.

enter image description here

Подробнее об этом: Там есть атрибут «Оттенок» в удостоверении инспектор UITabBar, который я считал бы сделать то же самое, но, по-видимому, он ничего не делает. Значение по умолчанию - это точный цвет заливки по умолчанию, когда выбран UITabBarItem, поэтому я предполагаю, что он будет исправлен в стабильном выпуске Xcode 7. Пальцы пересекаются.

+0

вы можете сделать это на xcode 6 тоже, хороший ответ, это должно быть решение –

+0

Это работает на iOS 8 тоже ... – Ankahathara

+0

похоже, что это еще не зафиксировано в официальном выпуске xcode 7 - этот ответ спас мне некоторую головную боль, спасибо! –

2

Начиная с прошивкой 8 это так просто, как:

UITabBar.appearance().tintColor = UIColor.redColor() 
4

Просто измените следующие свойства в Interface Builder для TabBar

Очевидно, что в моем случае его Уайта.

1

enter image description here

Для достижения выше результата выполнить следующие шаги.

Шаг 1: Добавьте нужные изображения в Assets.xcassets, и убедитесь, что они Render As: Default

enter image description here

Шаг 2: Выберите UITabBar объект и установить Image Tint цвет, этот цвет будет выбранный цвет вкладки

enter image description here

Шаг 3: ВыберитеUITabBar объект и добавить Key Path: unselectedItemTintColor, Тип: Color, Значение: Choose color for unselected item в User Defined выполнения Атрибуты.

enter image description here

Все сделано.

Смежные вопросы