2010-08-08 107 views
9

我正在加載自定義的nib文件來自定義UITableView的單元格。自定義筆尖具有通過標記從主視圖引用的UILabel。我想知道當單元格被選爲不同的顏色時,是否可以更改UILabel的陰影顏色,因此它看起來不像截圖中的樣子。自定義單元格選擇顏色的UILabel陰影

screenshot

回答

11

你可以在委託變更標籤的陰影顏色-tableView:willSelectRowAtIndexPath:。例如:

-(NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor greenColor]; 
    return indexPath; 
} 
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor redColor]; 
} 
+3

此答案對突出顯示的單元格狀態不起作用(即,如果用戶按下單元格但未釋放)。不幸的是,傑森的回答是我見過的最好的處理這種情況的最好答案。不幸的是,它涉及到子類。您可能還需要覆蓋setSelected: – Prometheus 2012-05-01 23:17:53

16

我更喜歡在TableCell代碼內部改變陰影顏色以不污染代表。您可以覆蓋此方法來處理它:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animate 
{ 
    UIColor * newShadow = highlighted ? [UIColor clearColor] : [UIColor whiteColor]; 

    nameLabel.shadowColor = newShadow; 

    [super setHighlighted:highlighted animated:animate]; 
} 
0

至少在上面顯示的示例中,簡單的答案是不首先顯示陰影。由於無論如何你都看不到白色,因此請將shadowColor設置爲-clearColor。

如果你確實需要陰影,重寫-setHighlighted方法是最好的解決方案。它將代碼保存在單元格中,我認爲這比從表格視圖中處理它好得多。

2

我有同樣的問題,並沒有上述解決方案相當適合我 - 我不想子類UITableViewCell,也有一些棘手的選擇/突出顯示的狀態更改編程完成,這並沒有與上述解決方案很好地發揮作用。

MySolution:

我到底做了什麼是使用第二UILabel主要UILabel下充當影子。對於那個'陰影'UILabel,你可以設置'突出顯示顏色'爲'清除顏色'。

很明顯,每次更新主標籤時都必須更新陰影標籤。在許多情況下,付出的代價並不是很大。

希望有幫助!