2010-02-03 5 views
16

Ich habe eine Anwendung mit einer modalen Ansicht erstellt, die ich anzeigen und dann ablehnen kann. Gibt es eine einfache Möglichkeit zu wissen, wann die modale Ansicht gelöscht wurde? Ich möchte die Daten in einer Tabelle neu laden, sobald die modale Ansicht gelöscht wurde und nicht die beste Möglichkeit, dies zu tun.Methode für, wenn die modale Ansicht verworfen wurde

Dank

Antwort

21

UIViewController hat eine Eigenschaft parentViewController genannt. Wenn ein Ansichtscontroller modal präsentiert wird, zeigt die Eigenschaft parentViewController auf den Ansichtscontroller, der den Modalansicht-Controller präsentierte.

In Ihrem Modal Ansicht Controller, in viewWillDisappear: können Sie eine Nachricht an die parentViewController senden, um jede Aktion, die Sie wünschen, im Wesentlichen durchzuführen.

Etwas wie:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self.parentViewController doSomething]; 
} 

Wenn Ihre Eltern-View-Controller eine Tabelle View-Controller ist, dann sollten Sie in der Lage sein [self.parentViewController.tableView reloadData]; zu nennen zu tun, was Sie erreichen wollen.

+0

Vielen Dank für die schnelle Antwort Jasarien, geben, dass ein Go ein bisschen später. – Jack

+2

Warum habe ich einen Downvote für diese Antwort bekommen? – Jasarien

+0

Nicht von mir hast du nicht – Jack

24

Die empfohlene Vorgehensweise besteht darin, einen Delegaten von Ihrem Modalansicht-Controller zurück zum View-Controller zu verwenden, der die Ansicht geöffnet hat. Sehen Sie sich die offiziellen Dokumente für Beispiele an.

Der Grund dafür, dass dies der empfohlene Weg ist, ist, dass der ViewController, der das Modal ursprünglich gestartet hat, auch die Kontrolle darüber hat, es zu verwerfen.

Es ist wirklich einfach zu tun und denke eleganter als mit viewWillDisappear - da es andere Gründe gibt, warum die Ansicht verschwinden könnte!

ein Protokoll auf Ihrem modalen Viewcontroller erstellen - xViewControllerDelegate

@protocol xViewControllerDelegate 

    - (void) modalDialogFinished; 

@end 

dann Ihre Eltern den Delegaten machen implementieren die <xViewControllerDelegate> verwenden, wenn Sie Ihre Eltern-View-Controller definieren.

Sie werden gezwungen, ein Verfahren haben modalDialogFinished in Ihren Eltern-View-Controller genannt - das Kommando entlassen umgehen kann und die Refresh usw.

Denken Sie daran, ein id<xViewControllerDelegate> in die modal-View-Controller in Ihrem Init-Code und speichern passieren es als ein Feld auf dem Objekt.

Wenn Sie Ihre modale Ansicht nicht auslassen möchten, müssen Sie nur auf delegate.modalDialogFinished verweisen.

Wenn das keinen Sinn ergibt, kann ich Sie auf einen besseren Beispielcode hinweisen - aber ich hoffe, dass die Verwendung von Delegaten für Sie nicht neu ist.

UPDATE ::

Hier ist die offizielle Apple-Dokumentation darüber, wie dies für einen Modal-View-Controller tun:

http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

+0

Dies sollte die Top-Rate-Antwort sein –

Verwandte Themen