2015-06-17 72 views
0

我使用代码来生成UI而不是IB。我尝试在表视图的初始化中将backgroundView设置为nil,并在viewDidLoad中直接更改backgroundColor,但都无法更改表视图的背景颜色。如何以正确的方式更改UITableView的背景颜色?

最后,我在viewWillAppear中设置了backgroundColor,它工作正常!

那么,表视图上的viewDidLoadviewWillAppear之间发生了什么?为什么它的背景颜色在这个短语中被改变了?

这里是我的代码:

// in tableview's init, doesn't work 
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { 
    self = [super initWithFrame:frame style:style]; 
    if (self) { 
     self.backgroundView = nil; 
     self.backgroundColor = [UIColor grayColor]; 
    } 
    return self; 
} 

// loadView 
- (void)loadView { 
    _personalView = [NSBPersonalView new]; 
    self.tableView = _personalView; 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
} 


// in view controller's viewDidLoad, doesn't work either 
- (void)viewDidLoad { 
    self.tableView.backgroundColor = [UIColor grayColor]; 
} 

// but in view controller's viewWillAppear, it works 
- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.tableView.backgroundColor = [UIColor grayColor]; 
} 
+0

http://stackoverflow.com/questions/1579550/uiviewcontroller-viewdidload-vs-viewwillappear-what-is-the-proper-division-of这可能有助于清除您的困惑.....! –

+0

我只是想知道为什么tableView的属性会在'viewDidLoad'后面改变,即使在'init'中设置了。 – vulgur

+0

你能告诉我代码,你到底写了什么? –

回答

0

我认为问题是,你不叫super loadViewsuper viewDidLoad。并且您不在self.view中分配loadView

+0

当使用代码形成视图而不是IB时,它是不是应该调用'[super loadView]'? – vulgur

+0

@vulgur视图属性应该在loadView中初始化,你也没有这样做。 – rounak

+0

但是我在tableView的'init'中做了初始化,并且在'loadView'中调用了,这不正确吗? – vulgur