我在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
中设置超级视图的背景颜色不起作用。
答案 0 :(得分:2)
您应该使用-viewDidLoad
代替-loadView
。
答案 1 :(得分:1)
如上所述,当访问viewcontrollers视图属性且视图属性为nil
时,将调用loadView
。如果NIB与控制器关联,他的方法将加载NIB的视图,否则它将创建一个视图。
该文档还指出,如果您自定义实现不应该调用super,但这将要求您创建自己的视图。
self.view = [UIView new]
没有self.view
因为您没有拨打[super loadView];
,调用super会为您创建视图。但是如果要覆盖此方法,则应创建自己的视图。如文档中所述。
Beter 是在加载视图时使用viewDidLoad
来自NIB,故事板或以编程方式加载。
-(void) viewDidLoad{
self.datePicker = [[UIDatePicker alloc] init];
[self.view addSubview:self.datePicker];
self.view.backgroundColor = [UIColor whiteColor];
}
答案 2 :(得分:0)
您可能应该在-viewWillAppear:
中设置背景颜色。来自-[UIViewController loadView]
的{{1}}:
视图控制器在请求view属性但当前为nil时调用此方法。此方法加载或创建视图并将其分配给视图属性。
我今天没有测试 ,但是当我调用self.view
时,我读到这句话说nil
是-loadView
,直到你明确地设置它为止。覆盖-loadView
的主要原因是自定义UIViewController
的{{1}}属性,可能是使用view
的特定子类,而不是通用。