2015-12-13 64 views
5

我無法使用UIAppearance機制更改UITableViewCell的文本顏色。使用UIAppearance更改所有UITableViewCell的文本顏色

這裏是我的代碼註釋顯示什麼工作對我來說,什麼是不:

UITableViewCell *cell = [UITableViewCell appearance]; 
cell.backgroundColor = [UIColor blueColor]; // working 
cell.textLabel.textColor = [UIColor whiteColor]; // NOT WORKING 
cell.detailTextLabel.textColor = [UIColor redColor]; // NOT WORKING 

UILabel *cellLabel = [UILabel appearanceWhenContainedIn:[UITableViewCell class], nil]; 
cellLabel.textColor = [UIColor whiteColor]; // working 

正如你可以看到,第二種方式是工作,但我不能設置不同的顏色,正常的文本和細節文本。

有什麼我做錯了嗎?

P.S.在Interface Builder中靜態定義東西不適用於我 - 我的主題可以在運行時動態更改。

回答

3

您做的是正確的事情,但iOS無法使用UIAppearance區分這兩個標籤。您應該將文本顏色設置爲willDisplayCell,或者,如果您確實想要使用UIAppearance,請創建可更準確定位的自定義UILabel子類。

如果你想使用willDisplayCell,它會是這個樣子:

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

另外,you might also find this answer has some other ideas.

+0

我需要一個小小的澄清 - 我創建了只有一個UILabel子類的詳細文本,說MyLabel。然後,我嘗試着色UILabel外觀和MyLabel外觀,給出了相同的類層次結構。問題在於UILabel顏色總是「獲勝」,MyLabel顏色永遠不會被應用。關於如何評估條件的任何想法? – frangulyan

1

可以設置文字顏色是這樣的。

[cell.textLabel setTextColor:[UIColor whiteColor]]; 
[cell.detailTextLabel setTextColor:[UIColor redColor]]; 
+0

正如我在我的文章中提到的 - 它不工作。我猜 '[cell.textLabel setTextColor:[UIColor whiteColor]];' 和'cell.textLabel.textColor = [UIColor whiteColor]; // NOT WORKING' – frangulyan

+0

你可以嘗試從視圖中獲取標籤UILabel * label =(UILabel *)[cell.contentView viewWithTag:yourLabelTag];然後設置文字顏色。 –

+0

它是一個外觀代理,它沒有任何contentView。 – frangulyan