2010-10-22 7 views
0

J'ai créé un élément de barre personnalisé dans le code.Modifier la couleur UIBarButtonItem

UIButton* backButton = [UIButton buttonWithType:102]; // left-pointing shape! 
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; 
[backButton setTitle:@"Custom Item" forState:UIControlStateNormal]; 

// create button item -- possible because UIButton subclasses UIView! 
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
self.navigationItem.leftBarButtonItem = backItem; 

Mais il s'affiche en bleu foncé. J'ai besoin d'avoir l'apparence par défaut pour ça. Comment définir l'apparence et la convivialité par défaut?

Cordialement,

Dilshan

Répondre

0

Probablement la mauvaise question, mais si vous êtes préoccupé par l'apparence et de pourquoi utilisez-vous UIButtonType non défini à la finesse bouton pointant vers la gauche »? Le bouton pointant vers la gauche est destiné à faire remonter la pile de navigation, et je pense que cela revient à peu près gratuitement si vous utilisez UINavigationController.

+0

Peut-être ai-je utilisé un nom de variable prêtant à confusion. En fait, j'ai besoin de personnaliser ce bouton. La fonctionnalité prévue n'est pas la fonction de retour. – Dilshan

+0

Donc, vous ne cherchez pas à obtenir un bouton pointant vers la gauche? Je veux juste être clair sur ce que sont les contraintes. – westsider

+0

oui bouton gauche personnalisé – Dilshan

0

voir "Changer les couleurs de UINavigationBarButtons"

EDIT: Je supprimer le lien parce que le domaine est en baisse ...

Le texte est le cache de google:


D'accord, Voici un autre conseil rapide. "Comment changer les couleurs d'un bouton sur une barre d'outils." Bien sûr, cela peut être appliqué à n'importe quelle barre d'outils, mais je vais démontrer la procédure sur un UINavigationBar.

L'image ci-dessus ne montre que quelques couleurs. En vérité, vous pouvez rendre le bouton de la couleur que vous voulez. Fantastique! Le code est vraiment simple à faire aussi. La première chose que nous voulons faire est d'ouvrir le fichier d'en-tête pour n'importe quel objet qui tournera un bouton de barre de navigation d'une couleur différente et de déclarer la classe forward UINavigationButton. Vous pouvez obtenir cette classe soit en parcourant les sous-vues de l'UINavigationBar, en lisant ses noms de classes de sous-vues, soit en faisant glisser UIKit en classe si vous avez un périphérique jailbreaké.

Placez la ligne suivante avant votre déclaration d'interface:

@class UINavigationButton; 

Maintenant, déclarer une nouvelle méthode dans l'en-tête que nous utiliserons pour réellement changer la couleur du bouton.

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor 

Ou quelque chose de similaire à la ligne de code ci-dessus.

Maintenant, ouvrez le fichier d'implémentation de votre objet et implémentez la méthode ci-dessus. Partout dans votre fichier, ajoutez la méthode suivante:

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor { 
    for (UIView *view in self.navigationController.navigationBar.subviews) { 
      NSLog(@"%@", [[view class] description]); 
      if ([[[view class] description] isEqualToString:@"UINavigationButton"]) { 
        [(UINavigationButton *)view setTintColor:newColor]; 
      } 
    } 
    } 

Comme vous pouvez le voir ci-dessus, c'est en fait beaucoup plus facile qu'il n'y paraît être. Ce que nous faisons d'abord est de mettre en place une boucle for pour parcourir les sous-vues de UINavigationBar en utilisant NSFastEnumeration. Nous affichons ensuite le nom de classe de la sous-vue, pour référence future. SI le nom de classe est UINavigationButton, alors nous avons notre vue. Tout ce que nous faisons est de définir la propriété tintColor si UINavigationButton.

Voilà, nous avons terminé!

Alternativement, si vous voulez une portée plus large, je suggère de créer une nouvelle catégorie UINavigationBar et de placer la méthode de changement de couleur du bouton. Cela a été votre méthode peut être effectuée par n'importe quelle classe qui utilise un UINavigationBar sans avoir à recréer la même méthode encore et encore.Rappelez-vous, un bouton de retour et un bouton de navigation ne sont pas la même chose. Vous devrez colorier le bouton arrière séparément.

Et comme d'habitude, voici un lien vers une application qui illustre ce code: NavButtonColor.zip


@Rob: oui, cela fonctionne pour la barre d'outils, aussi!

- (void)changeToolbarButtonColorToColor:(UIColor *)newColor { 
    for (UIView *view in self.navigationController.toolbar.subviews) {     
     if ([[[view class] description] isEqualToString:@"UIToolbarButton"]) {       
      [(UINavigationButton *)view setTintColor:newColor];    
     } 
    }  
} 

soigneusement: Vous devez utiliser « toolbar » dans la 2ème ligne et « UIToolbarButton » dans la 3ème ligne.
Ajoutez ce code dans votre viewDidLoad:

- (void)viewDidLoad { 
    [self changeToolbarButtonColorToColor: [UIColor colorWithRed:0.0/255 green:163.0/255 blue:224.0/255 alpha:1]]; 
} 

C'est tout! :)

+0

Avez-vous obtenu ceci pour travailler sur un UIToolBar? Je veux rendre rouge le bouton "Acheter". – Rob

+0

Je modifie ma réponse :) – Manni

Questions connexes