设置UIView背景loadView中的颜色无效

时间:2013-12-06 15:27:13

标签: ios iphone uiview uiviewcontroller ios7

我在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中设置超级视图的背景颜色不起作用。

3 个答案:

答案 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的特定子类,而不是通用。