![](/img/trans.png)
[英]Setting backgroundColor of custom UIButton class has no effect?
[英]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.view
是nil
,當-loadView
被調用,直到你把它明確。 覆蓋-loadView
是自定義UIViewController
的view
屬性,大概是使用UIView
的特定子類,而不是泛型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.