Ich möchte einen anderen Ansatz für dieses Problem vorschlagen. Verwenden Sie Abwicklungssegmente, anstatt einen Navigationscontroller zum Öffnen eines Ansichtscontrollers zu verwenden. Diese Lösung hat einige, aber wirklich wichtige Vorteile:
- Der Ursprungscontroller kann zu jedem anderen Zielcontroller (nicht nur zum vorherigen) zurückkehren, ohne etwas über das Ziel zu wissen.
- Push- und Pop-Segmente werden im Storyboard definiert, sodass in Ihren View-Controllern kein Navigationscode vorhanden ist.
Weitere Informationen finden Sie unter Schritt für Schritt Segmente abwickeln . Das Vorgehen wird im vorherigen Link besser erklärt, einschließlich des Zurücksendens von Daten. Hier werde ich jedoch eine kurze Erklärung abgeben.
1) Gehen Sie zum Ziel- View-Controller (nicht zum Ursprungs-View-Controller) und fügen Sie einen Abwicklungsbereich hinzu:
@IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
//let sourceViewController = unwindSegue.source
// Use data from the view controller which initiated the unwind segue
}
2) Ziehen Sie die STRG-Taste vom Ansichts-Controller selbst zum Exit-Symbol im Ursprungs-Ansichts-Controller:
3) Wählen Sie die Abwicklungsfunktion aus, die Sie vor wenigen Augenblicken erstellt haben:
4) Wählen Sie den Abwicklungsbereich und geben Sie ihm einen Namen:
5) Gehen Sie zu einer beliebigen Stelle des Ursprungsansichts-Controllers und rufen Sie den Abwicklungsbereich auf:
performSegue(withIdentifier: "unwindToContact", sender: self)
Ich habe festgestellt, dass sich dieser Ansatz sehr auszahlt, wenn Ihre Navigation kompliziert wird.
Ich hoffe das hilft jemandem.