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?
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)
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.
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)
}
Swift 4
il y a deux façons de revenir/revenir au ViewController précédent:
self.navigationController?.pushViewController(yourViewController, animated: true)
dans ce casvous avez besoin depour utiliser self.navigationController?.popViewController(animated: true)
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.
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)
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
pour Swift 3 il vous suffit d'écrire la ligne de code suivante
_ = navigationController?.popViewController(animated: true)
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)
Essaye ça: Pour la vue précédente, utilisez ceci:
navigationController?.popViewController(animated: true)
pop to root utilise ce code:
navigationController?.popToRootViewController(animated: true)
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 :)
Pour toute question concernant l'intégration de votre viewController à un navigationController dans le storyboard: