web-dev-qa-db-fra.com

Comment changer la couleur du texte dans UITabBarItem dans iOS 5

avec plus de contrôle de l'apparence dans iOS 5, comment changer la couleur du texte UITabBarItem? du blanc par défaut à une autre couleur?

EDIT: solution de travail

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

Voulez-vous dire celui-ci? N'oubliez pas que cela ne fonctionne que pour iOS 5.0 ou version ultérieure.

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

Documentation d'Apple sur la personnalisation de l'apparence:

Dans iOS version 5.0 et ultérieure, vous pouvez personnaliser l'apparence des barres d'onglets en définissant des attributs de texte d'étiquette d'élément à l'aide de sélecteurs d'apparence déclarés par UIBarItem. Vous pouvez également utiliser les méthodes répertoriées dans «Personnalisation de l'apparence». Vous pouvez personnaliser l'apparence de tous les contrôles segmentés à l'aide du proxy d'apparence (par exemple, [Apparence UITabBarItem]) ou simplement d'une barre de tabulation unique. Vous pouvez également fournir des images sélectionnées et non sélectionnées terminées à l'aide des méthodes répertoriées dans «Gestion de l'image sélectionnée»; ces méthodes ne participent cependant pas à l'API proxy UIAppearance (voir UIAppearance). UIKit fournit maintenant un traitement automatique des images finies. Pour obtenir de bons résultats, vous devez fournir des images sélectionnées sélectionnées et non sélectionnées dans des paires correspondantes à l'aide de setFinishedSelectedImage: withFinishedUnselectedImage :.

Edit: Voici un autre exemple utilisant le système UIAppearance et la syntaxe littérale 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)]}];

Éditer (par @JeremyWiebe): À partir de iOS 6, les clés de dictionnaire ont été modifiées pour être identiques à celles utilisées par 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, etc. sont obsolètes dans iOS 7.0.

Vous devez utiliser:

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

Spécifiquement pour iOS 7, essayez d’utiliser NSForegroundColorAttributeName au lieu de UITextAttributeTextColor.

4
seanoshea

Solution de travail pour 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

Je n'ai pas assez de points de réputation pour ajouter un commentaire, je vais donc ajouter une autre réponse ici.

J'ai eu le même problème et recherché pendant l'heure passée et finalement réalisé que mon problème est parce que je n'ai pas mis le code dans la méthode viewWillAppear. Pas sûr que ce soit du bon sens car je viens de commencer avec objective-c mais je pensais que cela devrait être une autre information importante pour la réponse car le même code ne fonctionnait pas dans viewDidLoad.

Selon this post , ce code ne fonctionne que s'il est placé dans la méthode viewWillAppear. 

0
Jove Kuang