350 votes

Instancier et présenter un viewController en Swift

Numéro

J'ai commencé à jeter un coup d'oeil sur le Swift Programming Language et, d'une manière ou d'une autre, je n'arrive pas à saisir correctement l'initialisation d'un UIViewController à partir d'un UIStoryboard .

Sur Objective-C J'écris simplement :

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"StoryboardName" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerID"];
[self presentViewController:viewController animated:YES completion:nil];

Quelqu'un peut-il m'aider à réaliser cela avec Swift ?

3voto

drew.. Points 90

Swift 4 :

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let yourVC: YourVC = storyboard.instantiateViewController(withIdentifier: "YourVC") as! YourVC

2voto

Aks Points 369

Si vous avez un Viewcontroller n'utilisant pas de storyboard/Xib, vous pouvez pousser vers ce VC particulier comme l'appel ci-dessous :

 let vcInstance : UIViewController   = yourViewController()
 self.present(vcInstance, animated: true, completion: nil)

0 votes

Je reçois ça : "ne peut être construit car il n'a pas d'initialisateurs accessibles".

0 votes

Les débouchés et autres relations établies par le storyboard sont perdus

1voto

Nadav96 Points 442

Je sais que c'est un vieux sujet, mais je pense que la solution actuelle (utiliser un identifiant de chaîne codé en dur pour un contrôleur de vue donné) est très sujette aux erreurs.

J'ai créé un script au moment de la construction (que vous peut accéder ici ), qui créera un moyen sûr pour le compilateur d'accéder aux contrôleurs de vue et de les instancier à partir de tous les storyboards du projet.

Par exemple, un contrôleur de vue nommé vc1 en Main.storyboard sera instancié comme suit :

let vc: UIViewController = R.storyboard.Main.vc1^  // where the '^' character initialize the controller

1voto

Binoy jose Points 413

Swift 5

let vc = self.storyboard!.instantiateViewController(withIdentifier: "CVIdentifier")
self.present(vc, animated: true, completion: nil)

0voto

J. Doe Points 2857

J'ai créé une bibliothèque qui gère cela beaucoup plus facilement avec une meilleure syntaxe :

https://github.com/Jasperav/Storyboardable

Il suffit de changer Storyboard.swift et de laisser le ViewControllers se conformer à Storyboardable .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X