2010-08-14 300 views
23

每當我向我的UITableViewCell添加一個accessoryView時,它不會傳遞背景顏色?我將UISwitch設置爲我的accessoryView,並且我在cell.backgroundColor屬性中設置的顏色隻影響contentView而不影響accessoryView。 我已經嘗試了所有設置爲相同的值。我試圖設置cell.backgroundView.backgroundColor和cell.accessoryView.backgroundColor屬性爲我想要的顏色,但沒有任何工作。我也嘗試在contentView中創建一個子視圖,它解決了backgroundColor問題(通過避免它),但它創建了問題,當文本太長時,開關位於cell.textLabel的頂部。改變cell.accessoryView和cell.editingAccessoryView的背景顏色

有沒有辦法可以修改accessoryView的背景顏色,而無需在contentView中創建子視圖,或者修改cell.textLabel的長度而無需創建UITableViewCell的子類?

回答

44

在閱讀文檔(一種新穎的想法)後,我發現文章「A Closer Look at Table-View Cells」。它幫助我瞭解細胞的成分,我發現我的答案...

細胞是這樣的......

alt text

由於cell.accessoryView是姐妹視圖細胞。 contentView我不得不問cell.contentView它的超級視圖,然後我能夠一次改變兩個視圖的背景顏色。下面是什麼代碼看起來像......

// Cell Formatting 
cell.contentView.superview.backgroundColor = [UIColor greenColor]; 

我知道這是很簡單,但我是一個新手,我花了長時間才放慢腳步,閱讀文檔。希望這有助於其他人在那裏!

+7

我知道它有點晚了,但你需要設置單元格的顏色在'的tableView:willDisplayCell:forRowAtIndexPath:'方法:) – Illep 2012-01-26 16:42:41

+0

幫我,但作爲一個額外的步驟,我不得不確保不在UITableViewCell的'superclass'上調用任何'setSelected'方法。看起來像這樣將** accessoryView **的背景顏色設置爲默認選擇顏色。 – Aerows 2016-11-10 14:21:13

1

@Zak,首先感謝提醒我注意細胞佈局的細節。很有幫助!
我只是想指出的是,下面的代碼:

self.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_background.png"]]; 

爲我工作。結果是延伸到整個細胞的背景圖像。 附件類型查看沒有掩蓋它!重要的部分是將此代碼放入layoutSubviews您自定義單元類的方法,而不是放入cellForRowAtIndexPath在TableViewController類中找到。在我來說,我定義的類CustomCell和它裏面我已經定義的標籤,圖像視圖等

注意:下面的代碼是不工作:

cell.contentView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_background.png"]]; 

的tableView把時:(UITableView的*)tableView cellForRowAtIndexPat方法。它給我的背景覆蓋單元格,但AccessoryTypeView是在它之上...

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

但我認爲着色的東西應該屬於視圖類。 Adarsh VC的解決方案更好,因爲它可以放在awakeFromNib中。 – johnlinvc 2012-08-16 03:36:59

14
UIView *myView = [[UIView alloc] initWithFrame:cell.frame]; 
myView.backgroundColor = [UIColor colorWithRed:214.00/255.00 green:233.00/255.00 blue:247.00/255.00 alpha:1.0]; 
cell.backgroundView = myView; 
[myView release]; 
1

如果你想與單元格的背景顏色相混合附屬視圖背景顏色,在iOS8上和斯威夫特這個工作就像在的tableView(_魅力,的cellForRowAtIndexPath :)方法:

let color = cell.contentView.backgroundColor 
cell.backgroundColor = color