![](/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.