7
votes

Effectuez la Segue dans la vue ViewDidLoad () sans contrôleur de navigation à Swift

J'ai trois vues (Vue 1 vérifie une connexion de serveur, la vue 2 montre le contenu principal, View3 affiche la page de support) et je les ai créés dans le storyboard sans codage. Lors du démarrage de mon application iOS, la vue 1 montre une spinner lors de la vérification de la connexion du serveur. Si la vérification de la connexion est passée, je veux aller à la vue 2 et s'il est échoué, je veux aller à la vue 3. La vue 1 est uniquement pour la vérification de la connexion et je ne veux pas retourner à cette vue. Donc, je pense que je n'ai pas besoin d'un contrôleur de navigation ou?

dans Storyboard I Connecte de toutes les visuelles avec des séquestres. Dans mon contrôleur d'affichage de la vue 1, je fais ceci: xxx

mais cette séance dans la fonction ViewDidLoad () fonction ne fonctionne pas, mais je ne fonctionne pas 't sais pourquoi. J'ai ajouté un bouton sur la vue pour vérifier. J'ai implémenté le même code comme dans ViewDidLoad () et ça fonctionne bien. En cliquant sur le bouton, les charges de la vue suivante.

Y a-t-il une idée de la raison pour laquelle le code ne fonctionne pas?


0 commentaires

3 Réponses :


3
votes

Vous pouvez utiliser ce code pour navigation.

    let vc : UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ConnectionCheckToMain") as! UIViewController;
    self.presentViewController(vc, animated: true, completion: nil)


4 commentaires

THX, mais maintenant, je reçois le message suivant: AVERTISSEMENT: tentative de présenter ON Quelle vue n'est pas dans la hiérarchie de la fenêtre! . Où est mon erreur?


J'ai résolu le problème, j'ai migré le code sur ViewDidAppear ().


J'ai essayé cette solution mais je reçois une erreur anyobject n'est pas convertible à "UIViewController" Voulez-vous utiliser 'comme!' Pour forcer le bowncast? Pourquoi?


Parce que Swift a été déplacé à 1.2, et maintenant, vous devez forcer le refuge avec l'alias "comme". Alors: comme! (1.2) = comme (1.1).



1
votes

J'ai eu le même problème et je l'ai résolu avec ce code:

dispatch_async(dispatch_get_main_queue(), { () -> Void in   
            let viewController:UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewControllerClassId") as! ViewControllerClassName
            self.presentViewController(viewController, animated: true, completion: nil)
        })


0 commentaires

5
votes

Ce code résolve pour moi (Swift 3) à l'aide de "Segue" (veuillez remplacer "ConnectiveChecktomain" avec votre nom de Segue.

DispatchQueue.main.async(execute: {
  self.performSegue(withIdentifier: "ConnectionCheckToMain", sender: nil)
  })


0 commentaires