45 votes

Comment obtenir ma UIWindow en utilisant UIApplication?

Je n'ai qu'une fenêtre et j'ai essayé

UIWindow* mWindow = [[UIApplication sharedApplication] keyWindow];

mais cette retourné néant.

J'ai aussi essayé:

UIWindow* mWindow = (UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0];

Mais cela a soulevé une exception et l'application fermée, quand j'ai essayé d'imprimer

[[UIApplication sharedApplication].windows count]

Imprimer 0

Note: je suis en train de monter dans ma seule vue du contrôleur de la méthode viewDidLoad et c'est complètement un nouvel iPad en Fonction de l'Application, donc j'ai rien changé, juste essayer d'obtenir la fenêtre

Merci de m'aider à obtenir cet objet

49voto

Phlibbo Points 3536

Si votre fenêtre principale est une prise de votre AppDelegate (ce qui devrait être le cas), vous pouvez simplement utiliser

 MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
 

42voto

iWasRobbed Points 26926

Le moyen le plus simple est d’obtenir la fenêtre du délégué de l’application à la place:

 UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
// Do something with the window now
 

20voto

cduhn Points 11229

La fenêtre de clé de votre application n'est pas définie tant que [window makeKeyAndVisible] n'est pas appelé dans votre délégué d'application. Votre UIViewController est probablement en cours de chargement depuis un NIB avant cet appel. Ceci explique pourquoi keyWindow renvoie zéro.

Heureusement, votre contrôleur de vue n'a pas besoin de passer par UIApplication pour obtenir la fenêtre. Vous pouvez juste faire:

 UIWindow *mWindow = self.view.window;
 

7voto

BadPirate Points 11614
[[[UIApplication sharedApplication] windows] objectAtIndex:0]; // You can also check the count of this to make sure, because if there are no windows it will crash.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X