Problème
J'ai commencé à jeter un oeil du nouveau Swift
sur Xcode 6
, et j'ai essayé quelques projets de démonstration et des tutoriels. Maintenant, je suis coincé à:
Instanciation puis présentation d'un à viewController
partir d'un storyboard spécifique
Solution Objective-C
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboardName" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"myVCID"];
[self presentViewController:vc animated:YES completion:nil];
Comment y parvenir sur Swift?
ios
objective-c
swift
uiviewcontroller
E-Riddie
la source
la source
;
! ;) Pourriez-vous élaborer sur le sujetas UIViewController
? Pourquoi est-ce nécessaire?as
Le mot clé est utilisé pour la conversion de type. C'est la même chose que(UIViewController *)anObject
dans l'objectif cinstantiateViewControllerWithIdentifier
retoursAnyObject
(id
équivalent dans Swift) et je déclarevc
queUIViewController
, je dois transtyperAnyObject
enUIViewController
.Pour les personnes qui utilisent la réponse de @ akashivskyy pour instancier
UIViewController
et qui ont l'exception:Conseil rapide:
Implémentez manuellement
required init?(coder aDecoder: NSCoder)
à votre destinationUIViewController
que vous essayez d'instancierSi vous avez besoin de plus de description, veuillez vous référer à ma réponse ici
la source
init(coder aDecoder: NSCoder!)
"requis". Alors maintenant, vous devez écrire ce qui suit:required init(coder aDecoder: NSCoder!)
Ce lien a les deux implémentations:
Rapide:
Objectif c
Ce lien a un code pour lancer le viewcontroller dans le même storyboard
la source
La réponse d'Akashivskyy fonctionne très bien! Mais, au cas où vous auriez du mal à revenir du contrôleur de vue présenté, cette alternative peut être utile. Ça a marché pour moi!
Rapide:
Obj-C:
la source
Le code mis à jour de Swift 4.2 est
la source
Cela a bien fonctionné pour moi quand je l'ai mis dans AppDelegate
la source
Si vous souhaitez le présenter de façon modale, vous devriez avoir quelque chose comme ci-dessous:
la source
Je voudrais suggérer une manière beaucoup plus propre. Cela sera utile lorsque nous avons plusieurs story-boards
1.Créez une structure avec tous vos story-boards
2. Créez une extension UIStoryboard comme celle-ci
Donnez l'identifiant du storyboard comme nom de classe et utilisez le code ci-dessous pour instancier
la source
Swift 4:
la source
Si vous avez un Viewcontroller n'utilisant aucun storyboard / Xib, vous pouvez pousser vers ce VC particulier comme ci-dessous:
la source
Swift 3
la source
Je sais que c'est un vieux fil, mais je pense que la solution actuelle (utilisant 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 de construction (auquel vous pouvez accéder ici ), qui créera un moyen sûr pour le compilateur d'accéder et d'instancier des contrôleurs de vue à partir de tous les storyboards du projet donné.
Par exemple, le contrôleur de vue nommé vc1 dans Main.storyboard sera instancié comme suit :
la source
Peu importe ce que j'ai essayé, cela ne fonctionnerait pas pour moi - pas d'erreurs, mais pas de nouveau contrôleur de vue sur mon écran non plus. Je ne sais pas pourquoi, mais l'enrouler dans la fonction timeout l'a finalement fait fonctionner:
la source
Swift 5
la source
J'ai créé une bibliothèque qui gérera cela beaucoup plus facilement avec une meilleure syntaxe:
https://github.com/Jasperav/Storyboardable
Changez simplement Storyboard.swift et laissez le se
ViewControllers
conformerStoryboardable
.la source