J'ai donc une vue de connexion. Après une connexion réussie, elle passe à la première vue d'un contrôleur de navigation, puis l'utilisateur peut approfondir une vue des paramètres puis une vue de la déconnexion. Cette déconnexion devrait ramener l'utilisateur à la vue de connexion (qui ne fait pas partie du contrôleur de navigation). Cela fonctionne avec ce code:
let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController
self.navigationController!.pushViewController(loginViewController!, animated: true)
Mais la vue de connexion affiche la barre de navigation en haut, ce qui ne devrait pas être fait. Peut-être y at-il autre chose que self.navigationController!.pushViewController
que je devrais utiliser?
Swift: Vous devriez utiliser une séquence de détente.
Tout d’abord, insérez la ligne suivante dans votre FirstViewController
:
@ IBAction func prepareForUnwind (segue: UIStoryboardSegue) { }
La fonction ne contient en réalité aucun code.
LogoutViewController
en faisant glisser le contrôle du bouton jaune au bouton Quitter. Comme ça:Sélectionnez la séquence de déroulement créée pour FirstViewController
.
Changer l'identifiant de la séquence:
Accédez au code de LogoutViewController
et appelez simplement la séquence de déroulement normalement:
self.performSegueWithIdentifier ("unwindToViewController1", expéditeur: auto)
Swift 4
self.performSegue (withIdentifier: "unwindToViewController1", expéditeur: self).
Si vous avez un contrôleur de navigation, utilisez-le depuis votre contrôleur:
self.navigationController?.popToRootViewControllerAnimated(true)
Si vous travaillez avec des story-boards, cherchez à vous détendre.
Il vous suffit de créer une option de déroulement dans le contrôleur, vers laquelle vous souhaitez accéder:
@IBAction func unwindToMe(segue: UIStoryboardSegue){}
Ensuite, créez Segue from Storyboard.
Et lorsque vous devez revenir en arrière, appelez simplement la méthode performSegue
avec l'identificateur de séquence de déroulement que vous venez de créer.
Si vous voulez le faire uniquement à partir de code, vous pouvez simplement écrire quelque chose comme:
let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Login")
UIApplication.sharedApplication().keyWindow?.rootViewController = loginViewController
Dans ce cas, vous définissez votre application sur son état initial.
l'essayer
self.view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
Cela vous ramènera au début du flux de l'application.
Mis à jour en Swift 4 (merci @javaBeast)
self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
Je vous recommande de faire la transition d'un ViewController à un autre, au lieu de pousser votre ViewController comme ça.
Donc, vous devez d’abord Ctrl + clic de votre premier ViewController sur votre ViewController de connexion, puis dans l’inspecteur d’attributs, donnez-lui un identifiant.
Ensuite, tout ce que vous avez à faire est ceci:
self.performSegueWithIdentifier("yourIdentifier", sender: self)
Maintenant, pour la barre de navigation, je vous suggère de supprimer le contrôleur de navigation de la vue de connexion et de l’associer à votre première vue. Cela supprimerait la barre de navigation de votre vue de connexion.
self.navigationController?.popToRootViewController(animated: true)
est la meilleure option pour aller au premier contrôleur du contrôleur de navigation puis renvoyer le contrôleur de navigation