2010-09-16 8 views
10

Voglio fare qualcosa di simile a UIAlertView, cioè - senza riferimento a qualsiasi UIView o UIViewController, presenta un UIViewController su tutte le finestre usando presentModalViewController.Come funziona [UIAlertView show]?

Guardando la documentazione non riesco a trovare un modo in cui ciò sia possibile!

In OS4, c'è qualcosa di simile:

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

... ma questo non è possibile in OS3.

Qualcuno sa come ottenere lo stesso effetto in OS3?

Grazie!


OK - così ho risolto questo con una miriade di richiamate delegate al ViewController stesso! Sebbene sia il modo corretto per raggiungere questo obiettivo, è sembrato piuttosto strano che non sia possibile in nessuna fase dell'esecuzione ottenere un handle per il View Controller in alto per gli avvisi (ecc.).

Se qualcuno sa come ottenere ciò, sarei ancora molto interessato!

risposta

19

UIAlertView crea il proprio UIWindow sopra la finestra principale dell'applicazione, makeKeyAndVisible -s e si anima nelle proprie viste in quella finestra.

+0

Ah, occhio aperto! Grazie per questo! Nick –

+2

Cosa/chi conserva l'istanza UIWindow? Quando creo un'istanza di UIWindow ma non la mantieni come variabile/proprietà di istanza, essa non viene mai visualizzata e sembra anche essere eliminata dall'array '[[UIApplication sharedApplication] windows]. Mi sto perdendo qualcosa? –

+0

Ok così nel tentativo di creare una sovrapposizione che agisce in modo simile a UIAlertView, ho reso la mia sottoclasse UIWindow effettivamente mantenuta da sé creando un ciclo di conservazione. Mi sto assegnando a una proprietà forte, quindi nel mio metodo di licenziamento ho impostato la proprietà su zero. Sembra funzionare, è una cattiva idea? Suppongo che UIAlertView faccia qualcosa di simile. –