Wie rufen Sie die Methode auf der Darstellung view controller aus modal-view-controller
Habe ich ein modal-view-controller, rief ich aus einem anderen view-controller. Nach der Entlassung des modal-view-controller, ich will eine Methode aufgerufen werden, auf der view-controller, vorgestellt, die in der modal-Ansicht. Was ist der einfachste Weg, dies zu tun?
Ich habe versucht zu tun, in meinem modal-view-controller: [(ParentViewController*)self.presentingViewController foo];
vor dem Aufruf [self dismissViewControllerAnimated:YES completion:nil];
.
Xcode gibt mir eine Fehlermeldung mit dem Inhalt foo ist nicht erkannt, obwohl es definiert ist, und einen Prototypen des Controllers. Wenn Ihre Lösung beinhaltet Blöcke, die ich wirklich verstehen Sie nicht, so würde ich es zu schätzen wissen, wenn Sie weitere Details hinzufügen. Danke.
ParentViewController.h
@interface ParentViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>
{
NewAssignmentViewController *newAssignmentViewController;
TableViewDataSource *data;
}
-(void)foo;
@end
Bitte geben Sie den code, den Sie haben in ParentViewController.h
Ich glaube nicht, dass das problem nicht die Umsetzung von foo, weil das Programm abstürzt, auch wenn foo nicht tun
Setzen Sie einen log-in, kurz bevor Sie entlassen die modal-view-controller, NSLog(@"%@",[self.presentingViewController Klasse]) und sehen, was es gibt
UITabBarController...
InformationsquelleAutor Iowa15 | 2013-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie, um eine korrekte Referenz zu Ihrer Präsentation-controller wie diesem:
Den anderen Weg, es zu tun wäre, um delegation, sondern das ist eine Antwort für eine andere Zeit.
InformationsquelleAutor rdelmar
Wenn Sie ein Storyboard segue, um Ihre view-controller könnte man getrost mit einem Unwind Segue. Unwind segue ist eine Besondere Art von segue, wickelt sich die vorgestellten view-Controller zurück an einen Moderator.
Um dies zu erreichen, erstellen Sie eine Methode in der Darstellung view controller mit der folgenden Signatur:
Dies ist anders als ein standard -
IBAction
da der parameter Typ ist einUIStoryboardSegue*
statt der normalenid
geben (es muss nicht benannt werdenunwindSegue:
, könnte es seinmodalViewFinished:
oder wie immer Sie wollen - der wichtige Teil ist, dass es einen RückgabetypIBAction
und ein parameter Art derUIStoryboardSegue*
).Sobald Sie diese Methode definiert, in der Sie Ihr storyboard-Steuerung-ziehen Sie den modal-view-controller-Symbol (unterhalb seiner Ansicht, in der kleine Leiste mit den Symbolen) und lösen Sie die Verbindung auf dem grünen exit-Schild. Dadurch wird ein unwind segue, die sollten Sie geben ein
identifier
im attributes inspector. Entspannen Sie leitet über nicht visuell im storyboard Leinwand, so haben Sie, um finden es in der Liste der Elemente auf der linken Seite der Leinwand (dieser ist standardmäßig eingeklappt, es zu erweitern, indem Sie die kleine Runde Taste in der unteren linken Ecke des canvas).Sobald Sie das getan haben, zu fordern, anstatt
[self dismissViewControllerAnimated:YES completion:nil]
haben, rufen Sie einfach[self performSegue:<Identifier you gave the unwind segue>]
statt. Während dieses Prozesses wird derunwindAction:
Methode definiert, die sich auf die Darstellung view controller und derprepareForSegue:
Methode auf den modal-view-controller aufgerufen werden soll. Sie können tun, was Aufräumen, die Sie tun müssen, um in diesen Methoden (aufrufen derfoo
Methode vonunwindSegue:
zum Beispiel).Ah, schade, Ausfahrt leitet über sind nett.
Ja, ich bin gerade erst anfangen zu lernen, iPhone-Programmierung, aber ich werde definitiv das nächste mal
Ich bekomme
Attempt to dismiss from view controller <MyTabBarController: 0xc233600> while a presentation or dismiss is in progress!
nachmodalViewFinished:
aufgerufen. Modal-Ansicht bleibt auf dem Bildschirm. Was kann ich tun ?Es klingt irgendwie wie noch code, der explizit die Abberufung von Ihrem view-controller irgendwo. Sie müssen entfernen, das unwind segue übernimmt das für Sie.
InformationsquelleAutor Charles A.
Rufen Sie die Methode auf dem UIViewController, dass Ihr MainView, und übergeben Sie es Ihrer UIViewController Sie wollen das ActionSheet.
Entlassen die UIActionSheet, dimissWithClickedButtonIndex:animiert: Sie ist eine Methode für die UIActionSheet, die Sie implementieren können. Die Methode kann aufgerufen werden, wer (also, wenn Sie wollen, um Sie zu schließen aus Ihrer mainview einen Verweis auf die Aktion dem Blatt und etwas tun, wie
Die Methode wird auch aufgerufen, wenn die Schaltfläche 'Abbrechen' geklickt wird, durch den Benutzer.
Verwenden Sie diese ModalViewControllers link zum besseren Verständnis...!
Ich bin immer noch nicht ganz klar. Was ich tun möchte ist meine modal-view-controller aufrufen einer Methode des view-Controllers vorgestellt, die es
Verwenden Sie es durch die Schaffung einer Referenz Ihrer selbst.presentingViewController Klasse MyClass *myclassObject = [[MyClass alloc]init]; [myclassObject foo];
Ok, I get it. Lassen Sie mich versuchen,
Ich bekomme eine Warnung, die sagt: inkompatible Zeiger-Typen zuordnen, MyClass __stark " von " UIViewController'
InformationsquelleAutor chandan