J'envoie l'utilisateur vers une page en cliquant sur un bouton. Cette page est un UITableViewController .
Maintenant, si l'utilisateur tape 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 procéder?
Réponses:
Swift 3:
Si vous souhaitez revenir au contrôleur de vue précédent
Si vous souhaitez revenir au contrôleur de vue racine
la source
.popViewController(animated: true)
_ = self.navigationController?.popToRootViewController(animated: true)
_ =
est la convention rapide pour cela.Swift 3 , Swift 4
navigationController est facultatif car il n'y en a peut-être pas.
la source
[weak self]
andself?.navigationController?.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as?
Mais quand j'utilise ceci je ne peux pas l'utiliserSwift 3
Je suis peut-être en retard dans la réponse, mais pour swift 3, vous pouvez le faire de cette façon:
la source
dismiss:
, non seulement le contrôleur de vue actuel sera rejeté, mais également le contrôleur de vue racine, et ce n'est pas ce qui a été demandé ici.dismiss(animated: true, completion: nil)
ne fonctionne pas après rotation!Swift 4
il y a deux façons de revenir / revenir au ViewController précédent:
self.navigationController?.pushViewController(yourViewController, animated: true)
dans ce cas, vous devez utiliserself.navigationController?.popViewController(animated: true)
self.present(yourViewController, animated: true, completion: nil)
dans ce cas, vous devez utiliserself.dismiss(animated: true, completion: nil)
la source
Dans le cas où vous avez présenté un
UIViewController
de l'intérieur d'unUIViewController
ie ..Appelez simplement la
dismiss
fonction:la source
self.dismiss(animated: true)
- ne fonctionne pas après la rotationrapide 5 et au-dessus
cas 1: utilisation avec le contrôleur de navigation
cas 2: utilisation avec le contrôleur de vue actuel
la source
Si Segue est une sorte de 'Show' ou 'Push', vous pouvez invoquer "popViewController (animated: Bool)" sur l'instance de UINavigationController. Ou si segue est une sorte de "présent" alors appelez "rejeter (animé: Bool, complétion: (() -> Vide)?)" Avec une instance de UIViewController
la source
pour swift 3, il vous suffit d'écrire la ligne de code suivante
la source
Essayez ceci: pour la vue précédente, utilisez ceci:
pop to root utilisez ce code:
la source
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 ...
Mais si vous voulez vraiment revenir à la dernière vue (qui pourrait être la vue Tab1, Tab2 ou Tab3 ..), vous devez écrire le code ci-dessous:
Cela fonctionne pour moi, j'utilisais une vue après l'un de mes TabView :)
la source
Pour toute question concernant la façon d'intégrer votre viewController à un navigationController dans le storyboard:
la source
Celui-ci fonctionne pour moi (Swift UI)
la source
Je l'ai fait comme ça
la source
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:
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:
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:
J'ai trouvé cette approche très rentable lorsque votre navigation commence à se compliquer.
J'espère que ça aidera quelqu'un.
la source
Je peux rediriger vers la page racine en écrivant du code dans "viewDidDisappear" du contrôleur navigué,
override func viewDidDisappear(_ animated: Bool) { self.navigationController?.popToRootViewController(animated: true) }
la source