2015-12-13 14 views
5

Ich bin nicht in der Lage, die Textfarben eines UITableViewCell mit UIAppearance Mechanismus zu ändern.Ändern Sie die Textfarben aller UITableViewCells mit UIAppearance

mein Code Hier ist mit Kommentaren zu zeigen, was für mich funktioniert und was nicht:

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 

Wie Sie die zweite Art und Weise sehen können, funktioniert, aber ich kann nicht verschiedene Farben in dem normalen Text und detailliert festgelegt Text.

Gibt es etwas, was ich falsch mache?

P.S. Das statische Definieren von Elementen in Interface Builder funktioniert nicht für mich - ich habe Themen, die während der Laufzeit dynamisch geändert werden können.

Antwort

3

Sie tun das Richtige, aber es gibt keine Möglichkeit für iOS, zwischen diesen beiden Labels mit UIAppearance zu unterscheiden. Sie sollten entweder die Textfarbe in willDisplayCell festlegen, oder, wenn Sie wirklich UIAppearance verwenden möchten, benutzerdefinierte UILabel Unterklassen erstellen, die Sie genauer ausrichten können.

Wenn Sie willDisplayCell verwenden möchten, würde es in etwa so aussehen:

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

Alternativ you might also find this answer has some other ideas.

+0

Ich brauche eine kleine Klarstellung - Ich habe nur eine UILabel-Unterklasse für den detaillierten Text, sagen MyLabel. Dann habe ich versucht, UILabel-Aussehen und MyLabel-Aussehen zu färben, indem ich die gleiche Klassenhierarchie gebe. Das Problem ist, dass die UILabel-Farbe immer "gewinnt" und die MyLabel-Farbe niemals angewendet wird. Irgendwelche Gedanken darüber, wie die Bedingungen bewertet werden? – frangulyan

1

Sie die Textfarbe wie folgt einstellen.

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

Wie ich in meinem Beitrag erwähnt habe - es funktioniert nicht. Ich denke, es gibt keinen Unterschied zwischen '[cell.textLabel setTextColor: [UIColor whiteColor]];' und 'cell.textLabel.textColor = [UIColor whiteColor]; // NOT WORKING – frangulyan

+0

Sie können versuchen, die Bezeichnung von der Ansicht zu erhalten UILabel * label = (UILabel *) [cell.contentView viewWithTag: yourLabelTag]; Stellen Sie dann die Textfarbe ein. –

+0

Es ist ein Aussehen Proxy, es hat keine ContentView. – frangulyan