【发布时间】:2014-12-26 11:05:39
【问题描述】:
我的情况如下:
我有不同的容器视图。如果用户触发点击事件,我会创建一个新容器并在其上调用一个方法,该方法设置子视图控制器的内容。我遇到的问题是该对象(在我的情况下为UIWebView)当时是可用的。原因是当时没有调用viewDidLoad,也没有设置webview。现在我在构造函数中移动了 webview 的初始化。这就引出了我的第二个问题:
在另一个容器上,我加载了相同的子视图控制器(上面有 Web 视图)。因为视图的边界在构造函数中不可用,所以我切换到自动布局。现在无法应用自动布局,因为没有超级视图。问题的原因是子视图的viewDidLoad 在添加到容器视图之前被调用(我在其中设置了约束)。因此,无论我尝试将其添加为子视图控制器的位置,都没有可用的超级视图。然后我将我的自动布局设置移到了updateViewConstraints 中,它可以工作。
现在我想知道何时会调用 viewDidLoad。我不能在视图控制器初始化后立即假设,因为那不是真的。准备好后,如何可靠地将数据传递给我的子视图控制器?我在这里做错了吗?
什么时候会调用viewDidLoad?有时它会在初始化后立即调用,有时不会...
【问题讨论】:
-
与其在孩子准备好时尝试设置数据,不如将其设置给孩子并使其在准备好时使用数据(即在 viewDidLoad 中)
-
你是对的。我改变了我的代码。我还改变的是,我想调用一个始终显示我的内容的方法。因为我这样做是为了在 Web 视图已经加载(第一个容器)以及初始化 Web 视图(第二个容器)之后显示内容,所以我得到了 nil 错误。感谢您的帮助!
标签: ios uiviewcontroller autolayout uicontainerview