Как изменить цвет текста в UITabBarItem в iOS 5 - PullRequest
27 голосов
/ 07 декабря 2011

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

РЕДАКТИРОВАТЬ: рабочий раствор

  [[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];

Ответы [ 6 ]

38 голосов
/ 07 декабря 2011

Вы имеете в виду это?Имейте в виду, что это работает только для iOS 5.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 v5.0 и новее вы можете настроитьпоявление панелей вкладок путем установки атрибутов текста метки элемента с помощью селекторов внешнего вида, объявленных UIBarItem.Вы также можете использовать методы, перечисленные в разделе «Настройка внешнего вида». Вы можете настроить внешний вид всех сегментированных элементов управления, используя прокси-сервер внешнего вида (например, [UITabBarItem Appearance]), или только одну панель вкладок.Вы также можете предоставить готовые выбранные и невыбранные изображения, используя методы, перечисленные в «Управление готовым выбранным изображением»;однако эти методы не участвуют в прокси-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)]}];

Редактировать (от @JeremyWiebe): Начиная с iOS 6, ключи словаря были изменены, чтобы быть такими же, как ОС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 }];
13 голосов
/ 04 июня 2013
[[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];
10 голосов
/ 31 июля 2013

UITextAttributeFont, UITextAttributeTextColor и т. Д. Устарели в iOS 7.0.

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

NSFontAttributeName, NSParagraphStyleAttributeName, NSForegroundColorAttributeName, NSBackgroundColorAttributeName, NSLigatureAttributeName, NSKernAttributeName, NSStrikethroughStyleAttributeName, NSUnderlineStyleAttributeName, NSStrokeColorAttributeName,  NSStrokeWidthAttributeName, NSShadowAttributeName and NSVerticalGlyphFormAttributeName
4 голосов
/ 25 сентября 2013

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

1 голос
/ 27 ноября 2014

Рабочее решение для 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];
}
0 голосов
/ 06 июня 2014

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

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

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

...