2010-09-23 16 views
42

que tienen una sola ventana y me trataroncómo obtener mi ventana UI usando UIApplication?

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

pero esto volvió nula.

También probé:

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

Pero esto produce una excepción y la aplicación cerrada, cuando traté de imprimir

[[UIApplication sharedApplication].windows count] 

Se impreso 0

Nota: Estoy poniendo esto en el método viewDidLoad de mi única vista de control y esto es completamente una nueva aplicación basada en la vista de iPad, así que no cambié nada, solo tratando de obtener la ventana

favor me ayude a conseguir este objeto

Respuesta

47

Si su ventana principal es una salida de la AppDelegate (que debería ser el caso), es posible utilizar simplemente

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

Si esto funcionó muy bien, gracias ... :) –

19

ventana clave de su aplicación no es establecido hasta que se llame al [window makeKeyAndVisible] en el delegado de su aplicación. Su UIViewController probablemente se está cargando desde un NIB antes de esta llamada. Esto explica por qué keyWindow está regresando a cero.

Afortunadamente, su controlador de vista no necesita pasar por UIApplication para obtener la ventana. Usted sólo puede hacer:

UIWindow *mWindow = self.view.window; 
+0

Gracias por su ayuda, pero esto no funcionó en viewDidLoad .. –

+5

Esto se debe a que la vista aún no forma parte de la jerarquía de vistas. Lo mismo es cierto para viewWillAppear :. – tomwhipple

5
[[[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. 
31

La manera más fácil es conseguir que la ventana del delegado de la aplicación en su lugar:

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

Excelente respuesta ... –

Cuestiones relacionadas