簡體   English   中英

在loadView中設置UIView的backgroundColor無效

[英]Setting UIView's backgroundColor in loadView has no effect

我在iOS 7應用中有一個UIDatePicker 它被添加到視圖控制器(子類)中,並且由於背景為黑色,因此幾乎不可讀。 (日期選擇器需要淺色背景。)

- (void)loadView
{
    self.datePicker = [[UIDatePicker alloc] init];
    ...
    [self.view addSubview:self.datePicker];

    // When placed here, without viewDidAppear, background remains black/transparent
    self.view.backgroundColor = [UIColor whiteColor];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    // When places here, the background becomes indeed white.
    self.view.backgroundColor = [UIColor whiteColor];
}

我當然可以在loadView設置日期選擇器本身的背景顏色,這就是我最終要做的。

但是我仍然不明白為什么在loadView設置超級視圖的背景顏色不起作用。

您應該使用-viewDidLoad而不是-loadView

如所述文檔所述,只要訪問viewcontrollers的view屬性並且view屬性為nil就會調用loadView 如果NIB與控制器關聯,則他的方法將從NIB加載視圖,否則將創建視圖。

該文檔還指出,如果您的自定義實現不應調用super,但這將需要您創建自己的視圖。

self.view = [UIView new]

沒有self.view因為您沒有調用[super loadView]; ,調用super將為您創建視圖。 但是,如果要覆蓋此方法,則應創建自己的視圖。 如文檔中所述。

最好是在從NIB,情節提要或以編程方式加載視圖時使用此調用的viewDidLoad

-(void) viewDidLoad{
    self.datePicker = [[UIDatePicker alloc] init];

    [self.view addSubview:self.datePicker];

    self.view.backgroundColor = [UIColor whiteColor];
}

您可能應該在-viewWillAppear:設置背景顏色。 來自的文檔
-[UIViewController loadView]

當請求其視圖屬性但當前為nil時,視圖控制器將調用此方法。 此方法加載或創建視圖,並將其分配給view屬性。

今天我沒有測試過,但我看是這樣說的self.viewnil ,當-loadView被調用,直到你把它明確。 覆蓋-loadView是自定義UIViewControllerview屬性,大概是使用UIView的特定子類,而不是泛型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM