1

我想测试更改 label.text 的 ViewController 的功能。起初我试过这个:

ViewController* controller = [[ViewControlleralloc] initWithNibName:@"ViewController_iPhone"bundle:nil];
[controller pressed];
NSLog(@"%@",controller.label.text);

按下的功能如下:

-(void)pressed{
self.label.text = @"hello";
}

但是,结果为 NULL。后来我改变了代码如下:

AppDelegate *delegate = [[UIApplicationsharedApplication] delegate];
ViewController* controller = [[ViewControlleralloc] initWithNibName:@"ViewController_iPhone"bundle:nil];
delegate.window.rootViewController = controller;
[controller pressed];
NSLog(@"%@",controller.label.text);

我认为这段代码

delegate.window.rootViewController = controller;

可以加载控制器的视图,以便更改标签的文本。但我不知道为什么。

4

1 回答 1

2

你是对的。

直到需要时才会加载视图。简单地创建视图控制器不会触发视图加载,但分配窗口的根视图控制器需要设置它以进行显示,因此实例化和链接所有 nib 对象。

对视图的任何引用也会导致它加载,甚​​至像:

ViewController* controller = [[ViewControlleralloc] initWithNibName:@"ViewController_iPhone"bundle:nil];
NSLog(@"%@", controller.view);
于 2012-06-04T12:38:48.400 回答