我有一个简单的xib文件,其布局为:
在我的UIViewController类中,浅绿色UIView被引用到IBOutlet view_content
。然后我在ViewController.m的initWithNibName:bundle:
中执行了以下操作:
self = [super initWithNibName:nibNameOrNil bundle:nil];
if (self) {
self.view_a = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
self.view_a.backgroundColor = [UIColor purpleColor];
[self.view_content addSubview:self.view_a];
self.view_b = [[UIView alloc] initWithFrame:CGRectMake(150, 150, 100, 100)];
self.view_b.backgroundColor = [UIColor blueColor];
[self.view_content addSubview:self.view_b];
self.view_c = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 100, 100)];
self.view_c.backgroundColor = [UIColor greenColor];
[self.view_content addSubview:self.view_c];
}
return self;
我预计会有3个小方块,每个小方块都有不同的颜色,如上面的代码所示,但它们没有显示加载和显示的视图。但是,如果我将addSubView:
次调用移至viewDidLoad
,则会按预期显示。我试图在if-segment中测试view_content
是否为零,并且当时似乎是零。我不明白为什么会这样,它是如何工作的,是不是视图和它的组件应该从xib加载?
感谢您的帮助!
答案 0 :(得分:1)
在调用initWithNibName:...
点时,视图本身尚未加载。这是一种优化(延迟加载),它会延迟加载视图,直到实际需要它为止。首次访问viewController.view
时实际加载了该视图,并且在调用viewDidLoad
时加载了该视图。
有些人通过调用[viewController view]
(或[self view]
,如果它在视图控制器的类中)强制视图控制器加载其视图。
答案 1 :(得分:0)
原因很简单。初始化控制器时,当前未加载视图意味着initWithNibName。所以最好的地方是viewDidLoad,你的所有插座已经分配。