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,然后将其添加为子视图?
答案 0 :(得分:2)
所以问题在于虽然创建(分配和初始化)视图控制器,但在有人引用其视图属性之前,不会加载其视图层次结构。
因此,当您阅读myVc.view
(实际上是[myVc view]
)时,如果尚未加载,则会导致视图控制器从故事板加载其视图。
您可能需要在此处考虑您的设计。创建一个视图控制器,只是为了获取它的视图并将它们添加到其他视图层次结构中,除非你在容器视图控制器API的框架内完成它。
如果要在屏幕上同时将多个视图控制器组合在一起,请查看“创建自定义容器视图控制器”in the View Controller Programming Guide。