3

我有一个这样创建的视图控制器实例instantiateViewControllerWithIdentifier

TBSCTestController* testController = [self.storyboard instantiateViewControllerWithIdentifier: @"OTP"];

TBSCTestController有一个IBOutlet名为的属性label,它与情节提要中的标签挂钩:

IBOutlet albel

我想修改label使用此代码的文本,但没有任何变化:

testController.label.text = @"newText";
[self.view addSubview: testController.view];  

是一个有效的testController实例,但它label是零。我错过了什么?

4

1 回答 1

9

UILabelnil因为你已经实例化了你的控制器,但它没有加载它的视图。控制器的视图层次结构在您第一次请求访问其视图时加载。因此,正如@lnafziger 所建议的那样(尽管出于这个确切原因它应该很重要),如果您切换两条线,它将起作用。所以:

[self.view addSubview: testController.view];  
testController.label.text = @"newText";

作为说明这一点的一个例子,即使这个也可以:

// Just an example. There is no need to do it like this...
UIView *aView = testController.view;
testController.label.text = @"newText";
[self.view addSubview: testController.view];  

或者这个:

[testController loadView];
testController.label.text = @"newText";
[self.view addSubview: testController.view];  
于 2012-05-28T07:47:47.863 回答