2016-06-08 51 views
0

我有三个视图控制器,每个都在同一个自定义视图控制器类和一个页面视图控制器下。我希望能够重用这三个视图控制器,但在子视图上使用不同的内容。但是,当我尝试从页面视图控制器使用[self.storyboard instantiateViewControllerWithIdentifier:identifier]实例化其中一个视图控制器时,使用一种方法在紧随其后的标记中查找子视图,则返回的子视图为空。有没有什么方法可以通过编程实例化视图控制器后通过标记获取子视图?以编程方式实例化自定义视图控制器并通过标记获取子视图

回答

1

视图控制器的视图在被显示之前不会被创建。他们不会调用instantiateViewControllerWithIdentifier:

你应该把一个访问viewDidLoadviewWillAppear,或viewDidAppear视图控制器的意见码之后创建。

您不应该尝试从外部对象操纵视图控制器的视图。这违反了封装原则,这是面向对象设计的一个重要原则。 (它也往往不起作用,因为你发现了。)

如果你需要通过编程方式对视图做些事情,你应该向视图控制器添加一个或多个公共方法,并调用这些方法来请求视图控制器对其观点进行调整。

+0

我试着把代码放在三个视图方法中,但是它只是改变子视图,就像你说的那样,视图即将被显示,这不是我正在寻找的,因为我希望信息在视图中已经。在显示视图之前,我无法对这些子视图进行调整吗? – insertawordhere

+0

viewDidLoad在创建视图控制器的视图**之后调用,但在显示**之前调用。这是视图控制器加载视图时进行一次性设置的地方。 –

+0

这似乎是不同的滚动浏览量,因为我的子视图没有改变,直到我完全滑动到视图时,使用viewDidLoad。我最终使用viewDidLayoutSubviews,这是我需要的。谢谢您的帮助 – insertawordhere

相关问题