Ich sende den Benutzer per Knopfdruck auf eine Seite. Diese Seite ist ein UITableViewController .
Wenn der Benutzer nun auf eine Zelle tippt, möchte ich ihn auf die vorherige Seite zurückschieben.
Ich habe über so etwas nachgedacht, self.performSegue("back")....
aber das scheint eine schlechte Idee zu sein.
Was ist der richtige Weg, um es zu tun?
Antworten:
Swift 3:
Wenn Sie zum vorherigen Ansichts-Controller zurückkehren möchten
Wenn Sie zum Root View Controller zurückkehren möchten
quelle
.popViewController(animated: true)
_ = self.navigationController?.popToRootViewController(animated: true)
_ =
ist die Konvention dafür schnell.Swift 3 , Swift 4
navigationController ist optional, da möglicherweise keiner vorhanden ist.
quelle
[weak self]
undself?.navigationController?.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as?
Aber wenn ich dies verwende, kann ich das nicht verwenden.Swift 3
Ich könnte zu spät in der Antwort sein, aber für Swift 3 können Sie es so machen:
quelle
dismiss:
, wird nicht nur der aktuelle Ansichts-Controller, sondern auch der Root-Ansichts-Controller geschlossen, und dies wurde hier nicht gefragt.dismiss(animated: true, completion: nil)
funktioniert nach der Rotation nicht!Swift 4
Es gibt zwei Möglichkeiten, zum vorherigen ViewController zurückzukehren:
self.navigationController?.pushViewController(yourViewController, animated: true)
In diesem Fall müssen Sie verwendenself.navigationController?.popViewController(animated: true)
self.present(yourViewController, animated: true, completion: nil)
In diesem Fall müssen Sie verwendenself.dismiss(animated: true, completion: nil)
quelle
In dem Fall, in dem Sie eine
UIViewController
von innerhalb einesUIViewController
dh präsentiert haben.Rufen Sie einfach die
dismiss
Funktion auf:quelle
self.dismiss(animated: true)
- funktioniert nicht nach der Rotationschnell 5 und höher
Fall 1: Verwendung mit dem Navigationscontroller
Fall 2: Verwendung mit dem aktuellen Ansichts-Controller
quelle
Wenn Segue eine Art 'Show' oder 'Push' ist, können Sie "popViewController (animiert: Bool)" auf Instanz von UINavigationController aufrufen. Oder wenn segue irgendwie "vorhanden" ist, rufen Sie mit der Instanz von UIViewController "entlassen (animiert: Bool, Vervollständigung: (() -> Void)?)" Auf
quelle
Für Swift 3 müssen Sie nur die folgende Codezeile schreiben
quelle
Versuchen Sie Folgendes: Verwenden Sie für die vorherige Ansicht Folgendes:
pop to root benutze diesen Code:
quelle
Swift 4.0 Xcode 10.0 mit einem TabViewController als letzte Ansicht
Wenn Ihr letzter ViewController in einen TabViewController eingebettet ist, werden Sie mit dem folgenden Code zum Stammverzeichnis gesendet ...
Wenn Sie jedoch wirklich zur letzten Ansicht zurückkehren möchten (dies kann die Ansicht Tab1, Tab2 oder Tab3 sein), müssen Sie den folgenden Code schreiben:
Das funktioniert bei mir, ich habe eine Ansicht nach einer meiner TabView verwendet :)
quelle
Bei Fragen zum Einbetten Ihres viewControllers in einen Navigationscontroller im Storyboard:
quelle
Dieser funktioniert für mich (Swift UI)
quelle
Ich habe es so gemacht
quelle
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:
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:
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:
Ich habe festgestellt, dass sich dieser Ansatz sehr auszahlt, wenn Ihre Navigation kompliziert wird.
Ich hoffe das hilft jemandem.
quelle
Ich kann zur Stammseite umleiten, indem ich Code in "viewDidDisappear" des navigierten Controllers schreibe.
override func viewDidDisappear(_ animated: Bool) { self.navigationController?.popToRootViewController(animated: true) }
quelle