2016-03-09 3 views
1

Je fais le code suivant pour faire un changement de thème l'échelle du système pour mon application pour les couleurs de bouton:Comment modifier la fenêtre UIWindow window.tintColor par défaut après l'avoir modifiée?

UIWindow *window = [[[UIApplication sharedApplication] windows] lastObject]; 
window.tintColor = [UIColor themeColorNamed:@"barAndButtonTextColor"]; 

La question est, comment puis-je tourner revenir à la couleur par défaut? Je l'ai essayé sans succès:

window.tintColor = nil; 

Lorsque je tente d'obtenir le UIColor par défaut lorsque l'application se charge d'abord et de le stocker, il va revenir comme nil dans mon AppDelegate:

UIColor *myColor = window.tintColor; 

Tous des idées sur la façon dont je peux résoudre cela? Je ne veux pas coder en dur la couleur, car qui sait ce qui pourrait changer dans les futures versions d'iOS.

Répondre

2

Le réglage à zéro est la manière correcte de restaurer la valeur par défaut.

Je devine que lastWindow n'est plus la même fenêtre lorsque vous essayez de restaurer la couleur de teinte par défaut. Le système peut avoir ajouté des fenêtres pour d'autres raisons.

Au lieu d'utiliser lastObject dans le tableau windows, j'utiliser keyWindow pour sa mise en deux fois:

UIWindow *window = [UIApplication sharedApplication].keyWindow; 
+0

Il serait intéressant de vérifier combien de fenêtres il y a (c'est-à-dire, [[[UIApplication sharedApplication] windows] count] '), et lequel contient le contrôleur de vue racine de son application. Je sais que les alertes système sont présentées dans une fenêtre séparée de celle de l'application, et que vous pouvez avoir plus d'une fenêtre lors de la prise en charge de moniteurs externes, mais je n'ai jamais expérimenté sur ce sujet ... –

1

Vous pouvez essayer

window.tintColor = [[UIView new] tintColor]; 

Je fais cela dans application:didFinishLaunchingWithOptions: quand je initialise ma fenêtre, car pour une raison quelconque, la couleur de la fenêtre est nil par défaut. En dépit d'être nul, je n'ai jamais rencontré un problème, mais j'ai eu des utilisateurs de mon application m'envoyer des captures d'écran des contrôleurs d'alerte et des feuilles d'action où le texte du bouton est invisible, et je suis sûr qu'il doit être lié à la couleur de la fenêtre ayant été nulle.