instantiateViewControllerWithIdentifier不会分配?

问题描述:

MyViewController *myVC = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"]; 

[scrollView addSubview:myVC.view]; 

上面的代码起作用,它会加载一个视图控制器,该视图控制器在故事板中的故事板ID为“MyViewController”,并将其显示为子视图。instantiateViewControllerWithIdentifier不会分配?

唯一的是我想,例如,在该视图控制器上设置UILabel的文本之前做addSubview。

像这样:

MyViewController *myVC = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"]; 

myVC.aTextLabel.text = @"pippo"; 

[scrollView addSubview:myVC.view]; 

但是,这是行不通的。 UILabel是空的。 - 直到我做了addSubview后,我才能对视图做任何事情。就像这样:

MyViewController *myVC = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"]; 

[scrollView addSubview:myVC.view]; 

myVC.aTextLabel.text = @"pippo"; 

上述作品,但它并不漂亮,标签的文本被认为已经加入后改变!

当我用来做没有故事板,我会做这样的:

MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 

    myVC.aTextLabel.text = @"pippo"; 

    [scrollView addSubview:myVC.view]; 

这将很好地工作。

我显示的视图没有通过seque连接到其他视图,我将它的多个实例并行加载到一个UIScrollView中,所以我希望最简单的方法与上面类似。

那么,我该如何以编程方式实例化视图,更新该视图上的UILabel,然后将其添加为子视图?

所以问题是,虽然视图控制器是创建(分配和初始化),它的视图层次不加载,直到有人引用其视图属性。

所以,当你阅读myVc.view(这实际上是[myVc view]),这会导致视图控制器从故事板加载其视图,如果它们尚未加载。

您可能需要在这里考虑您的设计。创建视图控制器,只是将其视图添加到其他视图层次结构中,不是一个好主意,除非您在容器视图控制器API的框架内执行

查看“创建自定义集装箱视图控制器”in the View Controller Programming Guide如果您想一次在屏幕上组合多个视图控制器。

+0

现在读了,我仍然不聪明 - 容器视图的视图控制器不充当我可以克隆的“模板”。在我的问题中,我希望在一个滚动视图中并排显示多个视图控制器,每个视图控制器都有自己的按钮和表格视图,其中包含一个公共数据源和委托。 – StuR 2013-03-05 15:54:47

+0

好的,如果你想让多个视图控制器同时处于活动状态和屏幕状态,那么这正是容器视图控制器设计的目的。您将拥有一个容器视图控制器,该控制器包含并管理您需要的许多其他视图控制器。 – 2013-03-05 16:36:10

+0

谢谢! - 并感谢所以让我们阅读这些内容,并感谢Google帮助我们找到这样的内容。我不会自己意识到这一点。 – guptron 2013-04-03 20:03:15