首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >viewDidLoad()在prepareForSegue()完成之前被调用: Swift

viewDidLoad()在prepareForSegue()完成之前被调用: Swift
EN

Stack Overflow用户
提问于 2016-04-25 21:46:40
回答 2查看 1.8K关注 0票数 1

我有一个ContainerVC,它包含一个变量controllerToLoad。默认情况下,它是"MainVC“,但是当单击菜单项时,我希望显示ContainerVC,但不加载MainVC,而是加载SecondVC。通过执行以下操作,我在我的MainVC的ViewDidLoad方法中加载了ContainerVC:

代码语言:javascript
运行
复制
if let controller = self.storyboard?.instantiateViewControllerWithIdentifier(controllerToLoad) {
    self.mainViewController = controller
}

我认为最好的方法是使用segue,所以我调用了以下代码行:

代码语言:javascript
运行
复制
self.performSegueWithIdentifier("MenuSegue", sender: self)

然后在我的prepareForSegue中执行以下操作:

代码语言:javascript
运行
复制
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 of my ContainerVC。在添加了print语句之后,我意识到实际上在调用performSegueWithIdentifier之后,在调用ViewDidLoad of ContainerVC之后立即执行

let secondViewController = segue.destinationViewController as! ContainerViewController secondViewController.controllerToLoad = "SecondVC"

EN

Stack Overflow用户

回答已采纳

发布于 2016-04-25 22:03:20

这是正确的行为,也是人们期待的行为。在prepareForSegue中,您可以访问destinationViewController及其属性,包括UIView元素,因此逻辑上视图必须已经加载。因此,将调用viewDidLoad

您可以使用另一种方法,例如viewWillAppear,它在prepareForSegue之后执行,但似乎另一种方法更好。也许是容器视图控制器上的一种方法,它告诉它加载并呈现一个新的VC。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36851656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档