Swift ios définit un nouveau contrôleur de vue racine
Je me demande si il est possible de définir un nouveau mot de CR?
Mon application init avec un uinavigation contrôleur qui a une vue de la table à la racine VC.
Puis, à partir de la vue de la table, je suis en cours d'exécution d'un autre segue à une fenêtre de connexion (présent sous forme modale) Si vous puis connectez-vous vous retrouver dans la rouge VC/page de compte. Ce que je veux faire maintenant est de mettre le rouge VC à la nouvelle racine VC de l'application, et de supprimer tous les sous-jacents de la VC. Afin que je puisse afficher un menu bouton/icône au lieu d'un bouton "Retour"
J'ai trouvé ceci mais je ne comprends pas comment l'utiliser:
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let yourViewController: ViewController = storyboard.instantiateViewControllerWithIdentifier("respectiveIdentifier") as! ViewController
let navigationController = self.window?.rootViewController as! UINavigationController
navigationController.setViewControllers([yourViewController], animated: true)
Mais je ne peux pas le faire fonctionner. Ainsi est-il possible de rendre le rouge vc dans l'image agir comme nouvelle racine VC.
source d'informationauteur user2722667
Vous devez vous connecter pour publier un commentaire.
Peut-être vous devriez essayer ce
Swift 3 Mise À Jour:-
Afin d'obtenir l'extrait de code à partir de la question de départ pour le travail, j'ai dû faire un changement à la troisième ligne
Je suis en utilisant ce code dans un @IBAction dans la vue contrôleur qui précède la nouvelle racine-vue-contrôleur.
Avec le code d'origine, j'ai reçu un message d'erreur indiquant que mon point de vue, contrôleur avait aucun membre appelé
window
. Après avoir regardé la la documentationj'ai pu trouver aucune propriété nomméewindow
. Je me demande si le bloc de code ci-dessus a été conçu pour être utilisé à l'intérieur d'unUINavigationController
fichier.Ici est le bloc dans son ensemble.
UINavigationController a un viewControllers de la propriété, qui est un NSArray, Et vous pouvez le remplacer par votre propre NSArray de vue controllrs.
Ce qui peut être fait tant que le montre ci-dessous un exemple de code.
Et si vous voulez montrer à cette nouvelle vue de la racine de contrôleur, vous pouvez simplement appeler UINavigationController de popToRootViewController() la méthode.
Oui, c'est possible. Comment vous faites ça dépend du contexte...
Il y a deux choses que l'on appelle communément la "racine-vue-contrôleur":
UIWindow
a unrootViewController
de la propriété, qui est accessible en écriture.UINavigationController
n'a pas derootViewController
de la propriété, mais il a un initialiseur appelé-initWithRootViewController:
. Vous pouvez définir la valeur liquidative du contrôleur de la "racine" - vue-contrôleur en définissant c'estviewControllers
propriété.Il semble que vous essayez de modifier la fenêtre racine de vue-contrôleur, mais le code que vous afficher uniquement les changements de la valeur liquidative du contrôleur de
viewControllers
de la propriété. Essayez le réglage de la fenêtrerootViewController
directement la propriété. Comprendre, cependant, que si vous prenez cette approche ensuite la manette de navigation disparaissent aussi. Si vous voulez conserver la valeur liquidative de contrôleur, d'autre part, aller avec votre approche.Plus d'informations ici serait utile. Qu'entendez-vous par "impossible de le faire fonctionner"? Ce qui se passe, et qu'attendez-vous d'arriver?
Vous pouvez utiliser ce morceau de code:
Swift 4 Réponse
Vous pouvez utiliser ce code lorsque vous cliquez sur le bouton de connexion :-
Comment et d'où êtes-vous présenter redVC?
Vous pourrait-il faire en vue de la racine de contrôleur de votre UINavigationController, donc vous devez toujours avoir la capacité de push et pop de vue des contrôleurs.
une fois que vous êtes dans le cr que vous souhaitez définir en tant que root, il suffit d'ajouter dans votre viewDidLoad:
*Meilleures pratiques vous devriez vérifier si il est déjà à la racine, si pas exécuter le code ci-dessus.
Swift 3
AppDelegate fichier:::
Swift 4
Vous pouvez essayer ce code