2010-11-23 4 views
0

Tous les joursiPhone - Comment définir des couleurs personnalisées dans la barre de navigation de l'élément "Plus"?

Ceci est un petit détail mais il affecte la finition professionnelle de mon application.

Mon application suit le modèle d'une barre d'onglets avec une barre de navigation sur chaque onglet avec plus de 5 onglets, d'où un élément "Plus". J'ai une teinte personnalisée appliquée à la barre de navigation, mais je n'ai pas été en mesure de trouver un moyen d'accéder à la barre de navigation de l'élément "Plus" pour définir la teinte sur cela. Quelqu'un peut-il me dire comment?

Mise à jour ...

Suite à la suggestion d'une catégorie sur UINavigationBar J'ai utilisé ce code ...

@implementation UINavigationBar (UINavigationBar_Additions) 

- (void)drawRect:(CGRect)rect { 
    UIColor *color = [UIColor colorWithRed:0.862745098039216 
            green:0.568627450980392 
             blue:0.098039215686275 
            alpha:1]; 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColor(context, CGColorGetComponents([color CGColor])); 
    CGContextFillRect(context, rect); 
    [self setBarStyle:UIBarStyleBlack]; 
    [self setTintColor:color]; 
} 

@end 

Mis à part l'avertissement d'Apple (pour des raisons qui semblent avoir du sens pour moi) à propos de ne pas surcharger les méthodes cachées comme ça, il perd aussi le dégradé sur le UINavigationBar & Je préfère garder ce que fait mon approche actuelle de la définition de la teinte en viewDidLoad.

Toutes les suggestions sur la façon dont je peux avoir mon gâteau & le mangent aussi.

TIA, Pedro :)

+0

double possible de [ Changer la couleur UINavigationbar pour l'onglet "Plus"?] (Http://stackoverflow.com/questions/4139719/change-uinavigationbar-color-for-more-tab) –

+0

Grâce à Jeff Kelley, j'ai résolu ce problème. C'est une petite chose à certains égards, mais ça va un chemin vers une belle finition professionnelle à mon application. – Pedro

Répondre

2

Il a été couvert before on StackOverflow, qui pointe vers this blog, mais la réponse est de faire ce qui suit:

tabBarController.moreNavigationController.navigationBar.tintColor = 
[UIColor orangeColor]; 
+0

Oh c'est une chose d'une grande beauté, merci :) Dommage que je n'ai pas trouvé ce post plus tôt quand je suis allé regarder avant de demander. – Pedro

+0

Cela teinte tout. Que faire si vous voulez simplement que la couleur de fond soit teintée? – jjxtra

1

Ajouter une catégorie à UINavigationBar et passer outre -drawRect :? (Vous pouvez alors faire des choses amusantes comme le dessin d'une image à la place ...)

+0

J'ai essayé cela avec des résultats que je vais mettre dans un montage. – Pedro

+0

Ce n'est pas comme cela que vous surchargez '-drawRect:' raisonnablement; cela implique généralement ce que certaines personnes appellent «méthode swizzling» (traditionnellement via un appel à 'method_exchangeImplementations()'); Vous devez le faire car le super-appel appelle l'implémentation de la super-classe, et non l'implémentation d'origine dans la classe. Je pensais que vous pouviez simplement définir la couleur de la teinte, puis appeler l'implémentation d'origine. –

Questions connexes