gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:44:41 27 4
gpt4 key购买 nike

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

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" 之前以及我的 ContainerVCViewDidLoad 中。添加 print 语句后,我意识到实际上只要 performSegueWithIdentifier 被调用,就在它调用 ContainerVCViewDidLoad 然后执行

让 secondViewController = segue.destinationViewController 作为!容器 View Controller
secondViewController.controllerToLoad = "SecondVC"

最佳答案

这是正确且符合预期的行为。在 prepareForSegue 中,您可以访问 destinationViewController 及其属性,包括 UIView 元素,因此从逻辑上讲, View 必须已经加载。因此,将调用 viewDidLoad

您可以使用另一种方法,例如 viewWillAppear,它在 prepareForSegue 之后执行,但似乎采用不同的方法会更好。也许你的容器 View Controller 上的一个方法告诉它加载并呈现一个新的 VC。

关于ios - viewDidLoad() 在 prepareForSegue() 完成之前被调用 : Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com