0

我有一个带有几个子视图的自定义视图控制器。这些子视图中的每一个都通过 IBOutlet 属性连接到视图控制器的 .m 文件。这些子视图具有自定义设置器,可根据该子视图是否显示内容来调整其他子视图的大小。

现在似乎这些自定义设置器在被调用initWithCoder:之前viewDidLoad被调用。(我希望/假设这是正常的。)

我的问题是调用self.view访问 self.view 的子视图的 setter 方法。我目前的理解是,这不应该是必要的。有人可以解释这里发生了什么吗?我宁愿这不会发生,因为我不打算通过访问来设置任何东西self.view

这是代码:https ://github.com/kenmhaggerty/Sandbox

4

1 回答 1

0

在视图控制器上调用 self.view 会导致它从 nib 加载它的视图,如果它还没有这样做的话。这将实例化 nib 中的所有对象(使用 initWithCoder:)并设置任何出口的值(使用您的访问器方法)。然后它调用 viewDidLoad,此时 nib 中的所有内容都将存在。

您的 outlet setter 方法可能不适合进行布局调整。要么使用基于约束的布局,它会自动适应子视图大小的变化,要么使用 viewDidLayoutSubviews,要么使用您正在使用的方法将模型信息传递给这些子视图。

于 2013-01-12T09:39:56.813 回答