Führen Sie ein Elternteil segue aus der embedded view-controller
Habe ich dieses:
-
MyTableViewController
(erbt vonUITableViewController
)- Es hat eine dynamische tableview mit ein paar Zellen (foo, bar, qux)
-
MyViewController
(erbt vonUIViewController
)- Es gibt einige "show" leitet über von diesem controller zu anderen view-Controller
- Es hat eine UIContainerView, bettet MyTableViewController
Ein Bild spricht tausend Worte:
Wenn eine bestimmte Zelle ausgewählt ist, ich möchte ein übergang von der Eltern-Ansicht (MyViewController
)
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if (indexPath.section == 1 && indexPath.row == 1) {
self.WHAT.performSegueWithIdentifier("someShowSegue1", sender: self)
}
}
Ist es möglich? was sollte ich in «WHAT»
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der
prepareForSegue:
für Ihre embedded segue set derviewController
in eine neue Immobilie in IhremtableViewController
, nennen wir esparentController
. Und dann haben Sie nur zu rufenself.parentController.performSegueWithIdentifier()
.BEARBEITEN: Aber zuerst von allen, vielleicht können Sie die vorhandenen
parentViewController
wenn es mit der Einbettung view-controller.sender
parameter, und dann bekommt Sie zurück in IhreprepareForSegue
Methode.Möchten Sie vielleicht zu prüfen, mit delegation um dieses problem zu lösen, da das Kind tableView scheint nicht, wie es sollte verantwortlich sein für den übergang. Zum Beispiel:
Keine Notwendigkeit für eine Eigenschaft erstellen. Nur diese
SWIFT 4
Swift 4 nicht mehr parentViewController. Sie müssen verwenden Sie den übergeordneten Zugriff auf das parent-Objekt und ein optionales so sicher sein, zu überprüfen, nil, wo es nötig ist.
Swift 4 no longer has parentViewController
Nein, Swift selbst ist nur ein Agnostiker Sprache und nicht alles enthalten, UI Verwandte. Diese änderung ist nicht durch die Swift 4. Es ist, weil die Methode geändert, die in das framework - im UIKit.Haken Ihre segue bis auf die eingebettete Tabelle, view-controller-Zelle statt. Sie können verschiedene leitet über pro Zelle Prototyp. Das erspart Ihnen die überprüfung der index-Pfade oder auch die Umsetzung
didSelectRow
überhaupt.Segue definiert ist, von einem view-controller zu einem anderen und ist nur berufen, aus der view-controller, in dem es definiert ist. So müssten Sie zum speichern der Referenz des parentViewController.
Wie aus
MyViewController
Nun können Sie einfach aufrufen leitet über wie
Hoffe, das hilft