我有一個ContainerVC
其中包含變量controllerToLoad
。默認情況下它是「MainVC」,但是當點擊一個菜單項時,我想提出ContainerVC
,而不是加載MainVC
,我希望加載SecondVC
。 我做加載MainVC我ContainerVC的viewDidLoad方法如下:viewDidLoad()在prepareForSegue()之前調用完成:Swift
if let controller = self.storyboard?.instantiateViewControllerWithIdentifier(controllerToLoad) {
self.mainViewController = controller
}
我認爲這樣做是賽格瑞的最好辦法,所以我把下面的代碼行:
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"
之前以及我的ContainerVC
的ViewDidLoad
之前。添加打印語句後,我意識到,其實只要performSegueWithIdentifier
被調用時,它調用之後的ContainerVC
ViewDidLoad
然後執行
let secondViewController = segue.destinationViewController as! ContainerViewController secondViewController.controllerToLoad = "SecondVC"
是的,你是對的。我把我的ContainerVC代碼放到一個方法中,它將self.mainViewController設置爲我傳遞的變量。偉大的提示! –