У меня есть ContainerVC
, который содержит переменную controllerToLoad
. По умолчанию это «MainVC», однако при нажатии на пункт меню я хочу представить ContainerVC
, но вместо загрузки MainVC
, я хочу загрузить SecondVC
. я загружаю MainVC в методе ViewDidLoad моего ContainerVC, выполнив следующие действия:viewDidLoad() Получение вызова Перед подготовкой к отделу() Отделка: Swift
if let controller = self.storyboard?.instantiateViewControllerWithIdentifier(controllerToLoad) {
self.mainViewController = controller
}
Я думал, что лучший способ сделать это с помощью Segue, поэтому я называю следующие строки кода:
self.performSegueWithIdentifier("MenuSegue", sender: self)
Тогда в моем prepareForSegue
я сделать следующее:
if (segue.identifier == "MenuSegue"){
let secondViewController = segue.destinationViewController as! ContainerViewController
secondViewController.controllerToLoad = "SecondVC"
}
по какой-то причине, при вызове performSegueWithIdentifier
он автоматически загружает ContainerVC
и начинает устанавливать self.mainViewController
в «MainVC» вместо того, чтобы ждать prepareForSegue
для запуска. Не знаю, почему его не ждет prepareForSegue
.
Я проверил это, добавив кучу заявлений на печать. прямо до self.performSegueWithIdentifier
и до secondViewController.controllerToLoad = "SecondVC"
и в ViewDidLoad
моего ContainerVC
. После добавления печати заявления я понял, что на самом деле, как только performSegueWithIdentifier
называется, сразу после того, он вызывает ViewDidLoad
из ContainerVC
затем выполняет
let secondViewController = segue.destinationViewController as! ContainerViewController secondViewController.controllerToLoad = "SecondVC"
Да, вы были правы. Я взял свой код ContainerVC и поместил его в метод, который устанавливает self.mainViewController в переменную, которую я передаю. Отличный намек! –