Как изменить цвет текста в UITabBarItem в iOS 5

с большим контролем внешнего вида в iOS 5, как мы можем изменить цвет текста UITabBarItem? от белого по умолчанию до другого цвета?

EDIT: рабочее решение

  [[UITabBarItem appearance] setTitleTextAttributes:
         [NSDictionary dictionaryWithObjectsAndKeys:
          [UIColor blackColor], UITextAttributeTextColor, 
          [UIColor whiteColor], UITextAttributeTextShadowColor, 
          [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
          [UIFont fontWithName:@"Rok" size:0.0], UITextAttributeFont, 
          nil] 
                                              forState:UIControlStateNormal];

Ответ 1

Вы имеете в виду это? Имейте в виду, что это работает только для iOS5.0 или новее.

if ([self.tabBarItem respondsToSelector:@selector(setTitleTextAttributes:)]) {
    NSLog(@"*** Support method(iOS 5): setTitleTextAttributes:");
    [self.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                [UIFont fontWithName:@"AmericanTypewriter" size:20.0f], UITextAttributeFont,
                                                [UIColor blackColor], UITextAttributeTextColor,
                                                [UIColor grayColor], UITextAttributeTextShadowColor,
                                                [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)], UITextAttributeTextShadowOffset,
                                                nil]];
}

Документация Apple по настройке внешнего вида:

В iOS версии 5.0 и более поздних версиях вы можете настроить внешний вид полос вкладок, установив атрибуты текстовых меток элементов с помощью переключателей вида, объявленных UIBarItem. Вы также можете использовать методы, перечисленные в разделе "Настройка внешнего вида". Вы можете настроить внешний вид всех сегментированных элементов управления с помощью прокси-сервера внешнего вида (например, [Внешний вид UITabBarItem]) или всего лишь одну панель вкладок. Вы также можете предоставить готовые выбранные и невыделенные изображения, используя методы, перечисленные в разделе "Управление готовым выбранным изображением"; эти методы, однако, не участвуют в API прокси-сервера UIAppearance (см. UIAppearance). UIKit теперь обеспечивает автоматическое лечение готовых изображений. Для получения хороших результатов вы должны предоставить готовые выбранные и невыделенные изображения в совпадающих парах с помощью setFinishedSelectedImage: withFinishedUnselectedImage:.

Изменить: Вот еще один пример использования системы UIAppearance и синтаксиса литералов NSDictionary:

[[UITabBarItem appearance] setTitleTextAttributes:@{
                         UITextAttributeFont : [UIFont fontWithName:@"AmericanTypewriter" size:20.0f],
                    UITextAttributeTextColor : [UIColor blackColor],
              UITextAttributeTextShadowColor : [UIColor grayColor],
             UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)]}];

Изменить (by @JeremyWiebe): Начиная с iOS 6, ключи словаря были изменены так же, как в OS X:

NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor grayColor];
shadow.shadowOffset = CGSizeMake(0, 1.0);

[[UITabBarItem appearance] setTitleTextAttributes:@{
                         NSFontAttributeName : [UIFont fontWithName:@"AmericanTypewriter" size:20.0f],
              NSForegroundColorAttributeName : [UIColor blackColor],
                       NSShadowAttributeName : shadow }];

Ответ 2

[[UITabBarItem appearance] setTitleTextAttributes:@{
                             UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                        UITextAttributeTextColor : [UIColor colorWithRed:0/255.0 green:48/255.0 blue:92/255.0 alpha:1.0],}
                                         forState:UIControlStateNormal];

[[UITabBarItem appearance] setTitleTextAttributes:@{
                             UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                        UITextAttributeTextColor : [UIColor colorWithRed:0/255.0 green:138/255.0 blue:196/255.0 alpha:1.0],}
                                         forState:UIControlStateSelected];

Ответ 3

UITextAttributeFont, UITextAttributeTextColor и т.д. устарели в iOS 7.0.

Вы должны использовать:

NSFontAttributeName, NSParagraphStyleAttributeName, NSForegroundColorAttributeName, NSBackgroundColorAttributeName, NSLigatureAttributeName, NSKernAttributeName, NSStrikethroughStyleAttributeName, NSUnderlineStyleAttributeName, NSStrokeColorAttributeName,  NSStrokeWidthAttributeName, NSShadowAttributeName and NSVerticalGlyphFormAttributeName

Ответ 4

В частности, для iOS 7 попробуйте использовать NSForegroundColorAttributeName вместо UITextAttributeTextColor

Ответ 5

Рабочее решение для iOS 7.0 +:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor redColor], NSForegroundColorAttributeName,
    nil] forState:UIControlStateNormal];

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor whiteColor], NSForegroundColorAttributeName,
    nil] forState:UIControlStateSelected];
}

Ответ 6

У меня недостаточно очков репутации, чтобы добавить комментарий, поэтому я добавлю еще один ответ.

У меня была та же проблема, и я искал последний час, и, наконец, понял, что моя проблема связана с тем, что я не помещал код в метод viewWillAppear. Не уверен, что это здравый смысл, поскольку я только начинал с objective-c, но думал, что это должен быть другой кусок важной информации для ответа, поскольку тот же код не работал внутри viewDidLoad.

Согласно этот пост, этот код работает только в том случае, если он помещен в метод viewWillAppear.