2010-09-16 15 views
10

Ich möchte etwas ähnliches wie UIAlertView tun, dh - ohne Verweis auf eine UIView oder UIViewController, präsentieren Sie einen UIViewController über alle Fenster mit presentModalViewController.Wie funktioniert [UIAlertView]?

Mit Blick auf die Dokumentation kann ich keinen Weg finden, in dem dies möglich ist!

In OS4, gibt es so etwas wie diese:

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

... aber das ist nicht möglich, in OS3.

Kann jemand den gleichen Effekt in OS3 erreichen?

Danke!


OK - so löste ich dies mit einer Vielzahl von Delegierten Rückrufe an die Viewcontroller selbst! Obwohl es der richtige Weg ist, um dies zu erreichen, schien es irgendwie merkwürdig, dass es in keinem Stadium der Ausführung möglich ist, einen Griff zum oberen View-Controller für Alerts (usw.) zu bekommen.

Wenn jemand weiß, wie man das erreicht, wäre ich immer noch wirklich interessiert!

Antwort

19

UIAlertView erstellt seine eigene UIWindow über dem Hauptfenster Ihrer Anwendung, makeKeyAndVisible -s, und animiert in seinen eigenen Ansichten in diesem Fenster.

+0

Ahh - Augenöffnung! Danke dafür! Nick –

+2

Was/wer behält die UIWindow-Instanz? Wenn ich eine Instanz von UIWindow erstelle, sie aber nicht als Instanzvariable/-eigenschaft beibehalte, wird sie nie angezeigt und scheint auch aus dem Array "[[UIApplication sharedApplication] windows]" gelöscht zu werden. Fehle ich etwas? –

+0

Ok, in dem Versuch, ein Overlay zu erstellen, das ähnlich wie UIAlertView funktioniert, habe ich meine UIWindow-Unterklasse effektiv behalten, indem sie einen Retain-Zyklus erstellt hat. Ich weise einer starken Eigenschaft 'self' zu, dann setze ich diese Eigenschaft in meiner Methode 'dismissue' auf null. Scheint zu funktionieren, ist das eine schlechte Idee? Ich gehe davon aus, dass UIAlertView etwas ähnliches tut. –