web-dev-qa-db-fra.com

Comment puis-je revenir au contrôleur de vue initial dans Swift?

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?

34
matt

Swift: Vous devriez utiliser une séquence de détente. 

  1. 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.


  1. A présent, accédez à votre scénario et créez une séquence de déroulement pour LogoutViewController en faisant glisser le contrôle du bouton jaune au bouton Quitter. Comme ça:

 control-dragging in action

  1. Sélectionnez la séquence de déroulement créée pour FirstViewController.

  2. Changer l'identifiant de la séquence:

 selected segue


 changing the identifier of the segue

  1. 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). 
    
70
Allan Scofield

Si vous avez un contrôleur de navigation, utilisez-le depuis votre contrôleur:

self.navigationController?.popToRootViewControllerAnimated(true)
26
Rene Ramirez

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.

25
Vasyl Khmil

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) 
10
Fco Junior

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.

0
tmato
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

0
Mr Zee