2010-09-16 11 views
10

Quiero hacer algo similar a UIAlertView, es decir, sin referencia a UIView o UIViewController, presento un UIViewController en la parte superior de todas las ventanas usando presentModalViewController.¿Cómo funciona [UIAlertView show]?

Mirando la documentación ¡no puedo encontrar la manera de hacerlo posible!

En OS4, no es algo como esto:

UIWindow *window = [UIApplication sharedApplication].keyWindow 
UIViewController *rootViewController = window.rootViewController 

... pero esto no es posible en OS3.

¿Alguien sabe cómo lograr el mismo efecto en OS3?

Gracias!


OK - ¡Así que resolví esto con una miríada de devoluciones de llamadas delegadas al ViewController mismo! Aunque es la forma correcta de lograrlo, parece extraño que no sea posible en cualquier etapa de la ejecución obtener un control para las alertas (etc) del controlador de visualización superior.

¡Si alguien sabe cómo lograr esto, todavía estaría realmente interesado!

Respuesta

19

UIAlertView crea su propio UIWindow sobre la ventana principal de su aplicación, makeKeyAndVisible -s it, y anima en sus propias vistas en esa ventana.

+0

Ahh - ¡ojo abierto! ¡Gracias por esto! Nick –

+2

¿Qué/quién conserva la instancia de UIWindow? Cuando creo una instancia de UIWindow pero no la conservo como una variable/propiedad de instancia, nunca aparece y parece que se eliminó de la matriz '[[UIApplication sharedApplication] windows]'. ¿Me estoy perdiendo de algo? –

+0

Ok, en un intento de crear una superposición que actúe de forma similar a UIAlertView, hice que mi subclase UIWindow se retenga de manera efectiva al crear un ciclo de retención. Estoy asignando 'self' a una propiedad fuerte, luego, en mi método de descartar, configuro esa propiedad en cero. Parece que funciona, ¿es esta una mala idea? Asumo que UIAlertView hace algo similar. –