it-roy-ru.com

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

с большим контролем внешнего вида в 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];
27
Desmond

Вы имеете в виду это? Имейте в виду, это работает только для 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]), или только одну панель вкладок. Вы также можете предоставить готовые выбранные и невыбранные изображения, используя методы, перечисленные в «Управление готовым выбранным изображением»; однако эти методы не участвуют в прокси-интерфейсе 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)]}];

Edit (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 }];
38
Kjuly
[[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];
13
carmen_munich

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

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

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

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

4
seanoshea

Рабочее решение для 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];
}
1
voghDev

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

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

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

0
Jove Kuang