我有我的视图控制器类MyVC从UIViewController类延伸。在指定的初始化我改变背景颜色以绿色环保为以下UIViewController指定的初始值设定项vs loadView方法
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self.view setBackgroundColor:[UIColor greenColor]];
}
return self;
}
我也有,创建一个新的UIView对象,并改变其颜色为红色
- (void)loadView
{
UIView* view = [[UIView alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
[view setBackgroundColor:[UIColor redColor]];
[self setView:view];
[view release];
}
指定初始化被称为的loadView方法在loadView调用之前。所以我期望我的视图颜色(我在指定的初始化程序中设置了绿色)应该变成RED(我在loadView中做的)。 我看到我的颜色是绿色的,如果我在指定的初始化程序中注释到绿色的颜色线,我会看到红色。那么为什么它不覆盖loadView方法中的视图属性,如果它是在初始化器之后调用的?
我不明白如何在我的初始化我分配视图self.view?调用[self.view setBack ...] API会隐式执行吗? – theiOSguy 2012-02-04 02:45:31
顺便说一句,我证实在这种情况下laodView被调用。也没有在我的初始化程序中,我将视图设置为self.view。 – theiOSguy 2012-02-04 02:51:54
对不起 - 应该解释一下。 UIViewController被设置为懒惰地创建它的视图。它不会在需要之前创建视图。无论何时访问'self.view'和'view'为零,视图控制器都会加载视图。 @robmayoff是正确的 - 它确实会调用'-loadView'来完成这个任务,但是它可以在你访问'self.view'的地方执行,在这种情况下,它就在你的初始化器中间。之后,您设置'self.view'的背景色,这就是您的视图具有绿色背景的原因。 – Caleb 2012-02-04 03:18:25