我的视图控制器类MyVC从UIViewController类扩展。在指定的初始化程序中,我将背景颜色更改为绿色,如下所示
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self.view setBackgroundColor:[UIColor greenColor]];
}
return self;
}
我还有loadView方法,它创建一个新的UIView对象并将其颜色更改为RED
- (void)loadView
{
UIView* view = [[UIView alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
[view setBackgroundColor:[UIColor redColor]];
[self setView:view];
[view release];
}
在loadView调用之前调用指定的初始值设定项。所以我希望我的视图颜色(我在指定的初始化程序中设置GREEN)应该变为RED(我在loadView中做过)。 我看到我的颜色为绿色,如果我在指定的初始化器中评论绿色线,那么我会看到红色。那么,如果在初始化程序之后调用它,为什么不覆盖loadView方法中的视图属性?
答案 0 :(得分:9)
迦勒几乎是对的。当您访问视图控制器的view
属性时,view
访问器方法会检查视图是否已加载。如果没有,则调用loadView
,然后调用viewDidLoad
,然后返回视图。
初始值设定项中的这一行访问view
属性:
[self.view setBackgroundColor:[UIColor greenColor]];
因此,要返回视图,view
访问者会调用您的loadView
方法。您的loadView
方法将视图的背景颜色设置为红色。然后您的初始化程序将背景颜色设置为绿色。
如果您在初始化程序和NSLog
方法中撒了一些loadView
,或者在loadView
方法中放了一个断点,您会看到loadView
是从view
调用,从initWithNibName:bundle:
调用。
答案 1 :(得分:3)
-loadView
的目的是,呃,加载视图。当您访问视图控制器的view
属性并且该属性的值为nil时,会调用它。在这种情况下,您可以在初始值设定项中访问self.view
,以便在-loadView
被调用时使用{{1}}。在此情况发生后设置视图的背景,因此视图以绿色背景结束。