web-dev-qa-db-fra.com

Changer la couleur de teinte de UIBarButtonItem

J'ai un projet utilisant Storyboards et chaque fois que j'appuie sur un contrôleur de vue avec une séquence, l'élément de bouton de barre créé dynamiquement est toujours bleu.

enter image description here

Cela me rend fou. Étant donné que cet objet est créé de manière dynamique, je ne peux pas définir sa couleur dans IB (comme je l’ai fait avec les éléments de bouton de barre précédents).

Parmi les solutions que j'ai essayées figurent:

  1. Placez-le dans la variable viewDidLoad du destinataire.
  2. Placez-le dans la variable viewDidAppear du destinataire.

    self.navigationItem.backBarButtonItem.tintColor = [UIColor whiteColor];

  3. Quand j'ai vu que cela ne fonctionnait pas très bien, j'ai essayé de définir plutôt left:

self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];

  1. J'ai essayé le code suivant (que j'ai obtenu d'autres réponses SO) dans le délégué de mon application lorsque la nouvelle vue est appelée et avant de transmettre la nouvelle vue:

    [[UIBarButtonItem appearance] setTintColor:[UIColor whiteColor]];

Toutes les réponses que j'ai trouvées sur Google recommandent d'utiliser le code ci-dessus, mais cela ne fonctionne pas du tout pour moi. Peut-être y at-il des changements dans l’API d’apparence d’iOS 7? Peu importe comment ou où j'essaie de mettre en blanc "Categorías", c'est toujours le bleu par défaut.

39
Andy Ibanez

Dans iOS 7, pour définir la couleur de tous les éléments barButtonItems de votre application, définissez la propriété tintColor dans la fenêtre de l'application dans AppDelegate.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.tintColor = [UIColor whiteColor];
    return YES;
}

Informations plus détaillées dans Guide de transition de l'interface utilisateur iOS 7 d'Apple (plus précisément dans la section «Utilisation de la couleur de teinte»).

***OU***

Sur la base de certains commentaires, vous pouvez également y parvenir avec le proxy d'apparence UINavigationBar. Cela affectera la teinteColor de UIBarButtonItems uniquement, par opposition à la définition de la teinteColor sur la fenêtre et à l’affectation de toutes les sous-vues de cette fenêtre.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if([UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) {
        [UINavigationBar appearance].tintColor = [UIColor whiteColor];
    }

    return YES;
}
82
hgwhittle

Je pense que vous recherchez une propriété de votre UINavigationBar. Essayez de régler self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Voir la section "Aspect des barres de navigation": https://developer.Apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UINavigationBar.html#//Apple_ref/doc/uid/TP40012857-UINavigationBar.SW1

22
Yuriy Panfyorov

Dans iOS 8, si vous avez modifié la couleur de la teinte UIView dans un but spécifique, par exemple pour la marque UIAlertView, la couleur de la teinte pour UIBarButtonItem dans UIToolBar a également changé. Pour résoudre ce problème, écrivez simplement ce code

[UIView appearance].tintColor = SOME_COLOR;
[UIView appearanceWhenContainedIn:[UIToolbar class], nil].tintColor = BLACK_COLOR;

Pour la couleur de teinte UIBarButtonItem dans UINavigationBar, utilisez la méthode standard

[UINavigationBar appearance].tintColor = BLACK_COLOR;
2
FunkyKat

Pour changer la couleur d’un élément spécifique (un bouton, par exemple) dans votre barre de navigation:

myButton.tintColor = [UIColor redColor];
0
Vette
UITabBar.appearance().tintColor = UIColor.yellowColor()
0
user2643679