Je voudrais suggérer une autre approche de ce problème. Au lieu d'utiliser le contrôleur de navigation pour faire apparaître un contrôleur de vue, utilisez des séquences de déroulement. Cette solution présente quelques avantages, mais vraiment importants:
- Le contrôleur d'origine peut revenir à n'importe quel autre contrôleur de destination (pas seulement le précédent) sans rien savoir de la destination.
- Les séquences push et pop sont définies dans le storyboard, donc pas de code de navigation dans vos contrôleurs de vue.
Vous pouvez trouver plus de détails dans Unwind Segues étape par étape . Le mode d'emploi est mieux expliqué dans l'ancien lien, y compris la façon de renvoyer des données, mais ici, je ferai une brève explication.
1) Accédez au contrôleur de vue de destination (et non à l'origine) et ajoutez une séquence de déroulement:
@IBAction func unwindToContact(_ unwindSegue: UIStoryboardSegue) {
//let sourceViewController = unwindSegue.source
// Use data from the view controller which initiated the unwind segue
}
2) Faites glisser CTRL du contrôleur de vue lui-même vers l'icône de sortie dans le contrôleur de vue d'origine:
3) Sélectionnez la fonction de déroulement que vous venez de créer il y a quelques instants:
4) Sélectionnez la séquence de déroulement et donnez-lui un nom:
5) Allez à n'importe quel endroit du contrôleur de vue d'origine et appelez la séquence de déroulement:
performSegue(withIdentifier: "unwindToContact", sender: self)
J'ai trouvé cette approche très rentable lorsque votre navigation commence à se compliquer.
J'espère que ça aidera quelqu'un.