2010-09-16 6 views
10

Je veux faire quelque chose de similaire à UIAlertView, c'est-à-dire - sans référence à UIView ou UIViewController, présenter un UIViewController au-dessus de toutes les fenêtres en utilisant presentModalViewController.Comment fonctionne [UIAlertView show]?

En regardant la documentation, je ne trouve pas comment cela est possible!

En OS4, il y a quelque chose comme ceci:

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

... mais cela est impossible dans OS3.

Est-ce que quelqu'un sait comment obtenir le même effet sous OS3?

Merci! OK - donc j'ai résolu ceci avec une myriade de rappels de délégué au ViewController lui-même! Bien que ce soit la bonne façon d'y parvenir, il a semblé assez étrange qu'il ne soit pas possible à aucun moment de l'exécution d'obtenir un contrôle du meilleur View Controller pour les alertes (etc).

Si quelqu'un sait comment y parvenir, je serais toujours très intéressé!

Répondre

19

UIAlertView crée son propre UIWindow au-dessus de la fenêtre principale de votre application, makeKeyAndVisible -s il, et anime dans ses propres vues dans cette fenêtre.

+0

Ahh - ouverture des yeux! Merci pour ça! Nick –

+2

Qu'est-ce/qui conserve l'instance UIWindow? Lorsque je crée une instance de UIWindow mais ne la conserve pas comme une variable/propriété d'instance, elle n'apparaît jamais et semble également être supprimée du tableau [[UIApplication sharedApplication] windows] '. Est-ce que je manque quelque chose? –

+0

Ok, donc dans une tentative de créer une superposition qui fonctionne comme UIAlertView, j'ai fait que ma sous-classe UIWindow se conserve effectivement en créant un cycle de conservation. J'affecte 'self' à une propriété forte, puis dans ma méthode de rejet je mets cette propriété à zéro. Semble fonctionner, est-ce une mauvaise idée? Je suppose que UIAlertView fait quelque chose de similaire. –