我有一个使用instantiateViewControllerWithIdentifier
创建的视图控制器实例,如下所示:
TBSCTestController* testController = [self.storyboard instantiateViewControllerWithIdentifier: @"OTP"];
TBSCTestController
有一个名为IBOutlet
的{{1}}属性,它与故事板中的标签相关联:
我想使用此代码修改label
的文本,但没有任何变化:
label
testController.label.text = @"newText";
[self.view addSubview: testController.view];
是有效的实例,但testController
是零。
我错过了什么?
答案 0 :(得分:9)
您的UILabel
是nil
,因为您已实例化您的控制器,但它未加载其视图。第一次请求访问其视图时,将加载控制器的视图层次结构。所以,正如@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];