Kwestia
Zacząłem przyjrzeniu nowej Swift
pozycji ON Xcode 6
, a próbowałem kilka projektów demonstracyjnych i samouczków. Teraz utknąłem w:
Tworzenie wystąpienia, a następnie prezentacja viewController
z określonej scenorysu
Rozwiązanie Objective-C
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboardName" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"myVCID"];
[self presentViewController:vc animated:YES completion:nil];
Jak to osiągnąć w Swift?
ios
objective-c
swift
uiviewcontroller
E-Riddie
źródło
źródło
;
! ;) Czy miałbyś coś przeciwko opracowaniuas UIViewController
? Dlaczego to konieczne?as
słowo kluczowe służy do rzutowania czcionek. Jest taki sam jak(UIViewController *)anObject
w celu cinstantiateViewControllerWithIdentifier
zwrotyAnyObject
(id
równoważne w Swift) i deklarujęvc
jakoUIViewController
, muszę typecastAnyObject
doUIViewController
.Dla osób używających odpowiedzi @ akashivskyy do tworzenia wystąpienia
UIViewController
i mają wyjątek:Szybka wskazówka:
Ręcznie zaimplementuj
required init?(coder aDecoder: NSCoder)
w miejscu docelowymUIViewController
, który próbujesz utworzyćJeśli potrzebujesz więcej opisu, zapoznaj się z moją odpowiedzią tutaj
źródło
init(coder aDecoder: NSCoder!)
„wymagane”. Więc teraz musisz napisać:required init(coder aDecoder: NSCoder!)
Ten link ma obie implementacje:
Szybki:
Cel C
Ten link zawiera kod do inicjowania kontrolera widoku w tej samej serii ujęć
źródło
Odpowiedź akashivskyy działa dobrze! Ale w przypadku problemów z powrotem z prezentowanego kontrolera widoku, ta alternatywa może być pomocna. To zadziałało dla mnie!
Szybki:
Obj-C:
źródło
Zaktualizowany kod Swift 4.2 to
źródło
To działało dobrze dla mnie, gdy umieściłem go w AppDelegate
źródło
Jeśli chcesz to przedstawić modalnie, powinieneś mieć coś w stylu:
źródło
Chciałbym zaproponować znacznie czystszy sposób. Będzie to przydatne, gdy mamy wiele scenariuszy
1. Utwórz strukturę ze wszystkich swoich scenariuszy
2. Utwórz takie rozszerzenie UIStoryboard
Podaj identyfikator serii ujęć jako nazwę klasy i użyj poniższego kodu do utworzenia wystąpienia
źródło
Swift 4:
źródło
Jeśli masz Viewcontroller nieużywający żadnej scenorysu / Xib, możesz przejść do tego konkretnego VC, jak poniżej:
źródło
Szybki 3
źródło
Wiem, że to stary wątek, ale myślę, że obecne rozwiązanie (użycie zakodowanego identyfikatora ciągu dla danego kontrolera widoku) jest bardzo podatne na błędy.
Stworzyłem skrypt czasu kompilacji (do którego można uzyskać dostęp tutaj ), który stworzy bezpieczny sposób kompilatora do uzyskiwania dostępu i tworzenia instancji kontrolerów widoku ze wszystkich scenariuszy w ramach danego projektu.
Na przykład kontroler widoku o nazwie vc1 w Main.storyboard zostanie utworzony w następujący sposób:
źródło
Bez względu na to, co próbowałem, to po prostu nie działałoby dla mnie - żadnych błędów, ale też żadnego nowego kontrolera widoku na moim ekranie. Nie wiem dlaczego, ale zawinięcie go w funkcję limitu czasu w końcu sprawiło, że działało:
źródło
Szybki 5
źródło
Stworzyłem bibliotekę, która poradzi sobie z tym znacznie łatwiej dzięki lepszej składni:
https://github.com/Jasperav/Storyboardable
Po prostu zmień Storyboard.swift i pozwól się
ViewControllers
dostosowaćStoryboardable
.źródło