instantiateViewControllerWithIdentifier不分配?

时间:2013-03-04 22:20:48

标签: objective-c uiviewcontroller uistoryboard xcode4.6

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

[scrollView addSubview:myVC.view];

上面的代码有效,它加载了我的故事板中的视图控制器,其故事板ID为:“MyViewController”并将其显示为子视图。

唯一的问题是,我想在进行addSubview之前在View Controller上设置UILabel的文本。

像这样:

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,然后将其添加为子视图?

1 个答案:

答案 0 :(得分:2)

所以问题在于虽然创建(分配和初始化)视图控制器,但在有人引用其视图属性之前,不会加载其视图层次结构。

因此,当您阅读myVc.view(实际上是[myVc view])时,如果尚未加载,则会导致视图控制器从故事板加载其视图。

您可能需要在此处考虑您的设计。创建一个视图控制器,只是为了获取它的视图并将它们添加到其他视图层次结构中,除非你在容器视图控制器API的框架内完成它。

如果要在屏幕上同时将多个视图控制器组合在一起,请查看“创建自定义容器视图控制器”in the View Controller Programming Guide