2016-12-28 1 views
0

J'ai 2 storyboards comme suit: (bientôt 3 quand j'ajouter dans un story-board admin qui est la raison pour laquelle je les sépare vers le haut)Une bonne façon de remplacer un story-board dans la Apps Hiérarchie, par opposition à la présentation sur

1 - Se connecter 2 - Storyboard pour les passagers

Selon leur connexion ou non à Firebase, c'est la façon dont je détermine la présentation. Je chargement à l'aide les didFinishLaunchingWithOptions du délégué de l'application comme si de le faire:

self.window = UIWindow(frame: UIScreen.main.bounds) 
    let standbyStoryboard: UIStoryboard = UIStoryboard(name: "StandbyStoryboard", bundle: nil) 
    let loginStoryboard: UIStoryboard = UIStoryboard(name: "LoginFlowStoryboard", bundle: nil) 

    // First check if the user is logged in 
    if let currentUser = FIRAuth.auth()?.currentUser { 
     let exampleViewController: StandbyVC = standbyStoryboard.instantiateViewController(withIdentifier: "Standby") as! StandbyVC 
     self.window?.rootViewController = exampleViewController 
     self.window?.makeKeyAndVisible() 

    } else { 
     // Not Logged In 
     let exampleViewController: LoginViewController = loginStoryboard.instantiateViewController(withIdentifier: "InitialLogin") as! LoginViewController 
     self.window?.rootViewController = exampleViewController 
     self.window?.makeKeyAndVisible() 
    } 

Lorsque l'utilisateur se déconnecte, je voudrais terminer le story-board de passagers et charger une connexion initiale à nouveau (en supposant qu'ils sont connecté). Je me suis dit que je ferais comme si, de la même manière que je les présente avec le story-board de passagers lors de la connexion:

func logout() {
  
    let loginStoryboard: UIStoryboard = UIStoryboard(name: "LoginFlowStoryboard", bundle: nil) 
    let exampleViewController: LoginViewController = loginStoryboard.instantiateViewController(withIdentifier: "InitialLogin") as! LoginViewController 
    self.present(exampleViewController, animated: true, completion: nil) 
} 

Est-ce la bonne façon de le faire? La seule raison pour laquelle je demande est parce qu'il semble que la fonction deinit {} ne soit pas appelée sur le contrôleur principal de mon storyboard passager lorsque la fonction de déconnexion est appelée et que la connexion initiale réapparaît (ce qui m'a amené à croire ce storyboard passager était encore attardais quelque part et que je suis « empiler plusieurs storyboards » si cela est possible et a du sens)

Répondre

1

la seule raison pour laquelle je demande est parce qu'il semble que la fonction deinit {} est pas appelé à la vue principale contrôleur de mon passager storyboard

Bien sûr que non, car au lieu de remplacer l'ex En passant par le contrôleur de vue Passenger, vous devez présenter le LoginViewController.

Mais s'il vous plaît comprenez que cela a rien que ce soit à faire avec des storyboards, multiples ou autres! C'est simplement ce que presentsignifie. Tout cela a à voir avec la gestion des contrôleurs de vue et la hiérarchie des contrôleurs de vue de votre application. Toute votre préoccupation avec les storyboards, dans le titre de votre question et dans la question elle-même, est un harcèlement total. Vous pouvez faire tout ce que vous faites avec un storyboard ou même sans storyboard du tout, et obtenir exactement le même résultat tout au long.

+0

Gotcha! Merci d'avoir éclairci ça, c'est ce que je pensais que c'était. Des conseils sur la façon d'accomplir comment présenter correctement le storyboard en remplacement du storyboard actuel? Je vais éditer mon titre pour le rendre plus clair. – Belvedare

+0

Vous ne "présentez pas de storyboard". Vous présentez un contrôleur de vue. Cela peut vraiment vous aider à vous arrêter et à vous familiariser avec la programmation orientée objet (classes et instances), ce qu'est un contrôleur de vue et ce qu'est un storyboard. – matt