вопрос
Я начал принимать вид нового Swift
ПО Xcode 6
, и я попробовал некоторые демонстрационные проекты и обучающие программы . Теперь я застрял в:
Создание и представление viewController
из определенной раскадровки
Решение Objective-C
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboardName" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"myVCID"];
[self presentViewController:vc animated:YES completion:nil];
Как этого добиться на Swift?
ios
objective-c
swift
uiviewcontroller
E-Riddie
источник
источник
;
! ;) Не могли бы вы остановиться на этомas UIViewController
? Почему это необходимо?as
ключевое слово используется для приведения типов. Это так же, как(UIViewController *)anObject
в объективе cinstantiateViewControllerWithIdentifier
возвращаетAnyObject
(id
эквивалент в Swift), и я объявляюvc
какUIViewController
, я должен типAnyObject
кUIViewController
.Для людей, использующих ответ @ akashivskyy для создания экземпляра
UIViewController
и имеющих исключение:Быстрая подсказка:
Вручную реализовать
required init?(coder aDecoder: NSCoder)
в пункте назначенияUIViewController
то, что вы пытаетесь создатьЕсли вам нужно больше описания, пожалуйста, обратитесь к моему ответу здесь
источник
init(coder aDecoder: NSCoder!)
«обязательно». Итак, теперь вы должны написать следующее:required init(coder aDecoder: NSCoder!)
Эта ссылка имеет обе реализации:
Swift:
Цель С
Эта ссылка содержит код для запуска viewcontroller в той же раскадровке
источник
ответ акашивского работает просто отлично! Но, если у вас возникли проблемы с возвратом из представленного контроллера представления, эта альтернатива может быть полезна. Это сработало для меня!
Swift:
Obj-C:
источник
Swift 4.2 обновил код
источник
Это работало хорошо для меня, когда я положил его в AppDelegate
источник
Если вы хотите представить это модально, у вас должно быть что-то вроде ниже:
источник
Я хотел бы предложить гораздо более чистый способ. Это будет полезно, когда у нас есть несколько раскадровок
1. Создайте структуру со всеми вашими раскадровками
2. Создайте расширение UIStoryboard, как это
Укажите идентификатор раскадровки в качестве имени класса и используйте приведенный ниже код для создания экземпляра.
источник
Свифт 4:
источник
Если у вас есть Viewcontroller, не использующий раскадровку / Xib, вы можете перейти к этому конкретному VC, как показано ниже:
источник
Свифт 3
источник
Я знаю, что это старый поток, но я думаю, что текущее решение (использующее жестко закодированный идентификатор строки для данного контроллера представления) очень подвержено ошибкам.
Я создал сценарий времени сборки ( доступ к которому вы можете получить здесь ), который создаст безопасный способ компилятора для доступа и создания экземпляров контроллеров представления со всей раскадровки в данном проекте.
Например, контроллер вида с именем vc1 в Main.storyboard будет создан следующим образом:
источник
Неважно, что я пытался, это просто не сработало бы для меня - без ошибок, но и без нового контроллера просмотра на моем экране. Не знаю почему, но обертывание в функции тайм-аута, наконец, заставило его работать:
источник
Swift 5
источник
Я создал библиотеку, которая будет обрабатывать это намного проще с лучшим синтаксисом:
https://github.com/Jasperav/Storyboardable
Просто измените Storyboard.swift и позвольте
ViewControllers
соответствоватьStoryboardable
.источник