[SWIFT] Soucis avec le changement de couleur d'une TabBar
Nouvelle semaine, nouveau soucis
Je vous explique mon cas..
J'ai 3 vues :
1/ la page de connexion
2/ un menu
3/ une page lorsqu'on choisi un élément du menu
Jusque là, rien de compliqué.
Avant, je passais toujours par la page de connexion quand j'ouvrai mon appli, je devais donc toujours me connecter..
A la connexion, je récupère via une API, les couleurs de l'application (dont la couleur de la TabBar), que je stock dans une clé
defaults.set(maCouleur, forKey: "CouleurApplication_rvb")
ça fonctionnait bien !
Maintenant, le principe de l'application à un peu changé et si je suis déjà connecté, je ne repasse plus par la page de login.
Le soucis, c'est qu'il ne me prends plus la couleur de ma TabBar alors qu'elle est bien stocké dans une clé, que j'arrive bien à la récupérer mais il ne me change pas la couleur.
Mon code pour changer la couleur :
UINavigationBar.appearance().barTintColor = UIColor(red: CouleurApplication_r/255.0, green: CouleurApplication_g/255.0, blue: CouleurApplication_b/255.0, alpha: 1)
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
UINavigationBar.appearance().tintColor = UIColor.white
UITabBar.appearance().tintColor = UIColor(red: 0.0/255/0, green: 165.0/255.0, blue: 227.0/255.0, alpha: 1.0)
Ce qui est bizarre c'est que si je clic sur un élément du menu, qui m'affiche un autre page, la couleur de la TabBar est bien présente, je retourne donc sur l'accueil et là, la couleur s'est bien mise (alors qu'elle n'y était pas au début)..
Il y a-t-il une fonction pour rafraichir la TabBar quand j'en ai envie ?
J'ai l'impression que je lui assigne la couleur trop tard, qu'elle est déjà chargée et qu'il ne la prend pas en compte
Pourtant, je le fais directement dans viewDidLoad, bref.. une idée ?
Réponses
From UIAppearance Documentation
C'est bien ce qu'il me semblait, elle était déjà chargée.
Du coup, j'ai modifier mon code comme ça :
ça fonctionne bien maintenant
Merci Larme pour la piste ^^
Au risque de faire mon chieur, évite ce genre de code :
préfère celui-ci :
Toute amélioration est la bienvenue, t'inquiète pas, tu fais pas ton chieur, au contraire, faut que j'me structure plus dans mon développement et j'oublie souvent de faire ce genre de vérification
Autre best practice évite aussi :
navBarColor.barTintColor = UIColor(red: CouleurApplication_r/255.0, green: CouleurApplication_g/255.0, blue: CouleurApplication_b/255.0, alpha: 1)
essaie de creer une extention de ton UIColor qui permet de te renvoyer la couleur de l'application de telle sorte à avoir
navBarColor.barTintColor = .colorApplication
Ah oui très bonne remarque ! C'est très pratique, surtout si tu as une multitude de label et que tu décides un jour de modifier la couleur du texte.
C'est surtout pratique dans le cas où j'ai la même couleur à changer plusieurs fois ^^
Mais en effet, c'est pratique
Merci à vous 2 ^^
Après ce que je fais aussi c'est de créer une UINavigationBar custom et de définir ses propriétés lors de l'instanciation de cette dernière. Tu peux en faire de même pour les autres composants.