2015-06-17 71 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