web-dev-qa-db-fra.com

Revenir par programme au précédent ViewController dans Swift

J'envoie l'utilisateur à une page sur un clic de bouton. Cette page est un UITableViewController

Maintenant, si l'utilisateur appuie sur une cellule, je voudrais le repousser à la page précédente.

J'ai pensé à quelque chose comme self.performSegue("back").... mais cela semble être une mauvaise idée. 

Quelle est la bonne façon de le faire? 

162
Christian

Swift 3:

Si vous voulez revenir au contrôleur de vue précédent

_ = navigationController?.popViewController(animated: true)

Si vous souhaitez revenir au contrôleur de vue racine

_ = navigationController?.popToRootViewController(animated: true)
440
Praveen Gowda I V

Swift 3 , Swift 4

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

navigationController est facultatif car il se peut qu'il n'en existe pas.

41
Vyacheslav

Swift 3

Je suis peut-être en retard dans la réponse, mais pour Swift 3, vous pouvez le faire comme suit:

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

il y a deux façons de revenir/revenir au ViewController précédent: 

  1. Premier cas : si vous avez utilisé: self.navigationController?.pushViewController(yourViewController, animated: true) dans ce casvous avez besoin depour utiliser self.navigationController?.popViewController(animated: true)
  2. Deuxième cas : si vous avez utilisé: self.present(yourViewController, animated: true, completion: nil) dans ce casvous avez besoin depour utiliser self.dismiss(animated: true, completion: nil)

Dans le premier cas, assurez-vous que vous avez intégré votre ViewController à un navigationController dans votre storyboard. 

16
Braham Youssef

Dans le cas où vous avez présenté une UIViewController à partir d'une UIViewController c'est-à-dire ...

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

Appelez simplement la fonction dismiss:

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

Si Segue est un type de 'Show' ou de 'Push', vous pouvez appeler "popViewController (animated: Bool)" sur l'instance de UINavigationController. Ou si segue est une sorte de "présent", appelez "licencier (animé: Bool, complétion: (() -> Nul)?)" Avec une instance de UIViewController

10
Pankaj

pour Swift 3 il vous suffit d'écrire la ligne de code suivante 

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

Swift 5 et plus

cas 1: utilisation avec le contrôleur de navigation

self.navigationController?.popViewController(animated: true)

cas 2: utilisation avec le contrôleur de vue présent

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

Essaye ça: Pour la vue précédente, utilisez ceci:

navigationController?.popViewController(animated: true)  

pop to root utilise ce code:

navigationController?.popToRootViewController(animated: true) 
2
Ahsan

Swift 4.0 Xcode 10.0 avec un TabViewController comme dernière vue

Si votre dernier ViewController est intégré dans un TabViewController, le code ci-dessous vous enverra à la racine ...

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

Mais si vous voulez vraiment revenir à la dernière vue (cela pourrait être Tab1, Tab2 ou Tab3), vous devez écrire le code ci-dessous:

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

Cela fonctionne pour moi, j'utilisais une vue après l'un de mes TabView :) 

1
Gabo MC

Pour toute question concernant l'intégration de votre viewController à un navigationController dans le storyboard:  

  1. Ouvrez votre story-board où se trouvent vos différents viewController
  2. Appuyez sur le viewController à partir duquel vous voulez que votre contrôleur de navigation démarre
  3. En haut de Xcode, appuyez sur "Editeur"
  4. -> Appuyez sur intégrer
  5. -> Tap "Contrôleur de navigation
0