Problem
Ich begann einen Blick von der neuen Einnahme Swift
auf Xcode 6
, und ich versuchte , einige Demo - Projekte und Tutorials. Jetzt stecke ich fest bei:
Instanziieren und dann Präsentieren viewController
eines bestimmten Storyboards
Ziel-C-Lösung
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboardName" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"myVCID"];
[self presentViewController:vc animated:YES completion:nil];
Wie erreicht man das auf Swift?
ios
objective-c
swift
uiviewcontroller
E-Riddie
quelle
quelle
;
! ;) Würde es dir etwas ausmachen, auf dasas UIViewController
einzugehen? Warum ist das notwendig?as
Das Schlüsselwort wird für die Typumwandlung verwendet. Es ist das gleiche wie(UIViewController *)anObject
in Ziel cinstantiateViewControllerWithIdentifier
RücksendungenAnyObject
(id
äquivalent in Swift) und I erklären ,vc
wieUIViewController
, I Rolle festgelegt haben ,AnyObject
umUIViewController
.Für Leute, die @ akashivskyys Antwort verwenden, um zu instanziieren
UIViewController
und die Ausnahme haben:Kurzer Tipp:
Implementieren
required init?(coder aDecoder: NSCoder)
Sie manuell an Ihrem ZielUIViewController
, das Sie instanziieren möchtenWenn Sie weitere Beschreibungen benötigen, lesen Sie bitte meine Antwort hier
quelle
init(coder aDecoder: NSCoder!)
"erforderlich" machen. Also jetzt müssen Sie Folgendes schreiben:required init(coder aDecoder: NSCoder!)
Dieser Link hat beide Implementierungen:
Schnell:
Ziel c
Dieser Link enthält Code zum Initiieren des Viewcontrollers im selben Storyboard
quelle
akashivskyys Antwort funktioniert gut! Falls Sie jedoch Probleme haben, vom vorgestellten Ansichts-Controller zurückzukehren, kann diese Alternative hilfreich sein. Es hat bei mir funktioniert!
Schnell:
Obj-C:
quelle
Swift 4.2 aktualisierter Code ist
quelle
Dies funktionierte gut für mich, als ich es in AppDelegate legte
quelle
Wenn Sie es modal präsentieren möchten, sollten Sie so etwas wie unten haben:
quelle
Ich möchte einen viel saubereren Weg vorschlagen. Dies ist nützlich, wenn wir mehrere Storyboards haben
1.Erstellen Sie eine Struktur mit all Ihren Storyboards
2. Erstellen Sie eine solche UIStoryboard-Erweiterung
Geben Sie die Storyboard-ID als Klassennamen an und verwenden Sie den folgenden Code zum Instanziieren
quelle
Swift 4:
quelle
Wenn Sie einen Viewcontroller haben, der kein Storyboard / Xib verwendet, können Sie wie folgt auf diese bestimmte VC zugreifen:
quelle
Swift 3
quelle
Ich weiß, dass es sich um einen alten Thread handelt, aber ich denke, dass die aktuelle Lösung (unter Verwendung einer fest codierten Zeichenfolgen-ID für einen bestimmten Ansichts-Controller) sehr fehleranfällig ist.
Ich habe ein Build-Time-Skript erstellt (auf das Sie hier zugreifen können ), mit dem ein Compiler-sicherer Weg für den Zugriff auf und die Instanziierung von View-Controllern von allen Storyboards innerhalb des angegebenen Projekts geschaffen wird.
Beispielsweise wird der Ansichtscontroller mit dem Namen vc1 in Main.storyboard wie folgt instanziiert:
quelle
Egal was ich versucht habe, es würde einfach nicht für mich funktionieren - keine Fehler, aber auch kein neuer View Controller auf meinem Bildschirm. Ich weiß nicht warum, aber das Einwickeln in die Timeout-Funktion hat es endlich geschafft:
quelle
Swift 5
quelle
Ich habe eine Bibliothek erstellt, die dies mit besserer Syntax viel einfacher handhabt:
https://github.com/Jasperav/Storyboardable
Ändern Sie einfach Storyboard.swift und lassen Sie das
ViewControllers
anpassenStoryboardable
.quelle