2011-01-02 10 views
9

Ich habe mehrere uiPopoverControllers in meiner universellen iPad App. Ich habe jetzt eine Anforderung, eine Funktion auszulösen, sobald ein bestimmtes Popover beendet wurde. Ich kann dies leicht tun, wenn der Benutzer im Popover auf "Schließen" klickt, aber wenn sie den Bildschirm berühren, um das Popover zu verbergen, kann ich meine Funktion nicht auslösen.ipad erkennen, wenn UIPopoverControllers entlassen werden

Ich google seit einiger Zeit und kann anscheinend keine Delegiertenmethoden finden, die ich vielleicht in meinem Hauptansicht-Controller verwenden könnte, um sie zu erfassen. Ich würde etwas wie didDissisPopoverController lieben - aber ich denke, es ist nicht verfügbar.

Wenn nicht, ich denke, das einzige, was zu tun wäre, die Berührungen zu erkennen und dann auszulösen? Grundsätzlich markiere ich eine UITableView-Zeile und lade das Popover. Ich muss die Zeile abwählen - also einfach [table reloaddata] aufrufen.

Danke für jede Hilfe zu diesem!

Antwort

21

Sie müssen dem UIPopoverController einen Delegierten zuweisen und dann die Methode - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController implementieren. Zum Beispiel:

@interface FooController : UIViewController <UIPopoverControllerDelegate> { 
    // ... 
} 
// ... 
@end 

Wenn Sie die UIPopoverController instanziiert (sagen wir für dieses Beispiel in FooController) ...

UIPopoverController *popover = // ... 
popover.delegate = self; 

Dann würden Sie die Methode implementieren:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    // do something now that it's been dismissed 
} 

Zugegeben, ich habe das nicht getestet, aber es scheint, als ob es funktionieren sollte ...

Hoffnung das hilft!

4

Sie können die delivery-Methode popoverControllerDidDismissPopover nach der folgenden Zuweisung verwenden: self.popoverController.delegate = self;

Beachten Sie, dass die Delegierungsmethode popoverControllerDidDismissPopover nicht aufgerufen wird, wenn Sie programmgesteuert [self.popoverController displacePopoverAnimated: YES] aufrufen.

+0

Dies ist wahr, schauen Sie in der Dokumentation: 'Der Popover-Controller ruft diese Methode nicht als Reaktion auf programmatische Aufrufe an die Methode displacePopoverAnimated: auf. Wenn Sie das Popover programmgesteuert ablehnen, sollten Sie alle Bereinigungsaktionen sofort nach dem Aufruf der Methode disposePopoverAnimated: ausführen.' –