it-swarm.com.de

Gehen Sie programmgesteuert zum vorherigen ViewController in Swift zurück

Ich schicke den Benutzer auf eine Seite mit einem Klick auf die Schaltfläche. Diese Seite ist ein UITableViewController

Wenn der Benutzer nun auf eine Zelle tippt, möchte ich ihn zur vorherigen Seite zurückschieben.

Ich dachte an etwas wie self.performSegue("back")...., aber das scheint eine schlechte Idee zu sein. 

Was ist der richtige Weg, dies zu tun? 

162
Christian

Swift 3:

Wenn Sie zum vorherigen View Controller zurückkehren möchten

_ = navigationController?.popViewController(animated: true)

Wenn Sie zum Root-View-Controller zurückkehren möchten

_ = navigationController?.popToRootViewController(animated: true)
440

Swift 3 , Swift 4

if movetoroot { 
    navigationController?.popToRootViewController(animated: true)
} else {
    navigationController?.popViewController(animated: true)
}

der navigationController ist optional, da es möglicherweise keinen gibt.

41
Vyacheslav

Swift 3

Ich könnte zu spät in der Antwort sein, aber für Swift 3 können Sie es so machen:

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "< Back", style: .plain, target: self, action: #selector(backAction))

    // Do any additional setup if required.
}

func backAction(){
    //print("Back Button Clicked")
    dismiss(animated: true, completion: nil)
}
28
Fullpower

Swift 4

es gibt zwei Möglichkeiten, zum vorherigen ViewController zurückzukehren: 

  1. Erster Fall : Wenn Sie verwendet haben: self.navigationController?.pushViewController(yourViewController, animated: true) in diesem Fallbenötigen Sie, um self.navigationController?.popViewController(animated: true) zu verwenden.
  2. Zweiter Fall : Wenn Sie verwendet haben: self.present(yourViewController, animated: true, completion: nil) in diesem Fallbenötigen Sie, um self.dismiss(animated: true, completion: nil) zu verwenden.

Stellen Sie im ersten Fall sicher, dass Sie Ihren ViewController in einen navigationController in Ihr Storyboard eingebettet haben 

16
Braham Youssef

Wenn Sie eine UIViewController aus einer UIViewController dargestellt haben, d. H.

// Main View Controller
self.present(otherViewController, animated: true)

Rufen Sie einfach die Funktion dismiss auf:

// Other View Controller
self.dismiss(animated: true)
14
spencer.sm

Wenn Segue eine Art "Show" oder "Push" ist, können Sie "popViewController (animiert: Bool)" in der Instanz von UINavigationController aufrufen. Oder wenn segue eine Art "anwesend" ist, dann rufen Sie "deuse (animiert: Bool, Vollendung: (() -> Void)?)?"

10
Pankaj

für Swift 3 müssen Sie nur die folgende Codezeile schreiben 

_ = navigationController?.popViewController(animated: true)
7
Amr Angry

Swift 5 und höher

fall 1: Verwendung mit dem Navigationscontroller

self.navigationController?.popViewController(animated: true)

fall 2: Verwendung mit vorhandenem View-Controller

self.dismiss(animated: true, completion: nil)
4
midhun p

Versuche dies: Verwenden Sie für die vorherige Ansicht Folgendes:

navigationController?.popViewController(animated: true)  

pop to root verwende diesen Code:

navigationController?.popToRootViewController(animated: true) 
2
Ahsan

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 an das Stammverzeichnis weitergeleitet.

navigationController?.popToRootViewController(animated: true)
navigationController?.popViewController(animated: true)

Wenn Sie wirklich zur letzten Ansicht zurückkehren möchten (dies könnte Tab1, Tab2 oder Tab3 sein), müssen Sie den folgenden Code schreiben:

_ = self.navigationController?.popViewController(animated: true)

Das funktioniert für mich, ich habe eine Ansicht nach einer meiner TabView verwendet :) 

1
Gabo MC

Bei Fragen zum Einbetten des viewControllers in einen navigationController im Storyboard:  

  1. Öffnen Sie Ihr Storyboard, wo sich Ihr anderer viewController befindet
  2. Tippen Sie auf den viewController, von dem aus Ihr Navigationscontroller starten soll
  3. Tippen Sie oben in Xcode auf "Editor".
  4. -> Tippen Sie auf Einbetten
  5. -> Tippen Sie auf "Navigation Controller