2010-11-10 105 views
30

我創建了一堆在表格視圖中重用的單元格。所有這些單元內部都有不同的UILabel s和一些UIImageView s(沒有任何內容覆蓋整個單元)。無法在IB中設置UITableViewCell的背景顏色

在IB中設置背景顏色沒有效果(總是白色或透明,不能說它們中的哪一個)。但是,如果我按下Command-R(模擬界面),單元格在模擬器中具有正確的背景顏色。

我試圖在tableView:cellForRowAtIndexPath:中設置它,但它不能像我想的那樣工作。

該做的伎倆:

cell.contentView.backgroundColor = [UIColor redColor]; 

但這些都沒有影響(即使我設置cell.contentView.backgroundColorclearColor):

cell.backgroundView.backgroundColor = [UIColor redColor]; 

cell.backgroundColor = [UIColor redColor]; 

我把所有的佈局/字體/背景的東西在IB。任何想法爲什麼這不起作用在這種情況下?

爲什麼我需要修改contentViewbackgroundColor而不是backgroundView的?

這似乎是一個常見問題。有人能請我指出正確的方向(最終)瞭解如何在表格視圖單元格中處理背景顏色。

回答

1

有一個更簡單的解決方案:當您在Interface Builder中創建UITableViewCell時,只需拖放一個額外的UIView,以便它覆蓋您在IB內創建的整個UITableViewCell。將您的其他UI元素放在這個額外的UIView之上。您可以將此額外UIView設置爲您喜歡的任何背景。

有StackOverflow上相當多的答案,那建議你用一行代碼像這樣的改變你的UITableViewCell的背景色:

cell.contentView.backgroundColor = [UIColor redColor]; 

如果通過調整添加投影到您的稍微有contentView的框架大小,你可能會發現這條線會改變你的單元格的背景顏色和陰影區域的顏色。

51

要更改單元格的背景顏色,您必須在willDisplayCell:forRowAtIndexPath:方法中執行此操作。這是在UITableViewCell documentation附近的一個盒裝筆記中提到的。因此,你需要:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell.backgroundColor = [UIColor redColor]; 
} 

的內容查看只是建議子視圖把定製控件中,所以當正確的表格編輯是怎麼回事,該小區被奠定了。

+2

thx的信息。但是,爲什麼IB中的設置不起作用?我在控制器中設置了label.text。並設置背景IB在所有筆尖(UIView)中工作,但不能在UITableViewCell中工作。 – klemens 2010-11-10 14:33:30

+0

目前無法確認,但UITableViewCell似乎是一個特例。在willDisplayCell和自定義單元格的Apple文檔中,它提到了使用這種稱爲「在表視圖完成後根據選擇設置顏色」的方法。如果您在代碼中創建了UITableViewCell的自定義子類,但無法立即檢查它,它可能會工作。 – Anna 2010-11-10 15:51:18

+0

好的,所以我只是在代碼中設置它。 thx爲您提供最出色的幫助。 – klemens 2010-11-10 16:20:39