web-dev-qa-db-fra.com

Obtenir une teinte globale à partir du code

Existe-t-il un moyen d'obtenir la couleur de teinte globale de mon projet à l'aide d'un code? Pour éviter tout malentendu, je parle de la couleur de teinte globale, que je peux définir dans l'inspecteur de fichier.

22
fahu

Dans le délégué de l'application, vous pouvez le définir par

UIColor *globalTint = [[[UIApplication sharedApplication] delegate] window].tintColor;
31
Maximilian

Facile. 

Objectif c:

UIColor *tintColor = [[self view]tintColor];

Rapide:

let tintColor = self.view.tintColor;

Cela devrait obtenir la teinte définie sur l'application. Si vous le changez, cette propriété devrait être mise à jour. Cela suppose que vous vous trouvez dans un viewController ou dans une sous-classe de celui-ci et que vous n'avez pas remplacé la teinteColor dans une superView entre cette vue et la fenêtre. 

Mise à jour: Remarquez que si vous essayez d'obtenir la couleur de teinte d'un contrôleur de vue qui n'a pas été ajouté à la fenêtre, il n'aura pas la couleur de teinte personnalisée car cette couleur est héritée de l'objet window. Merci à @ManuelWa pour l'avoir signalé dans les commentaires.

30
smileBot
[UIApplication sharedApplication].delegate.window.rootViewController.view.tintColor

Semble travailler.

2
nurider
[UIApplication sharedApplication].keyWindow.tintColor;
1
FunkyKat

La réponse de Max est correcte, mais j'ai découvert qu'il fallait afficher la fenêtre de navigationController:

self.navigationController.view.window.tintColor = [UIColor redColor];

Toutefois, notez que cela ne fonctionnera pas si vous avez défini manuellement la teinteColor à partir de Storyboard. La valeur de Storyboard sera utilisée si vous l'avez déjà fait. J'ai déposé un bogue avec Apple à ce sujet. Je pense que ce code ne devrait pas être ignoré même si nous avons défini la teinteColor de Storyboard.

1
Enrico Susatyo

Swift 4.x :

extension UIColor {
    static var tintColor: UIColor {
        get {
            return UIApplication.shared.keyWindow?.rootViewController?.view.tintColor ?? .red
        }
    }
}

Utilisation :

textField.textColor = .tintColor
0
Ramis