我有我的視圖控制器類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