2009-07-22 17 views
23

In meiner App habe ich eine Tabellenansicht mit customViewCells. Ich unterklassifizierte die Klasse UITableViewCell und fügte ein Bild hinzu, das Async lädt und für den Text, den ich verwende cell.textLabel.text = @"someThext".Ändern von UITableViewCell textLabel Hintergrundfarbe zum Löschen

Für die Zellen wird die Hintergrundfarbe alternativ auf [UIColor darkGrayColor] und [UIColor whiteColor] eingestellt.

Wenn ich die App im Simulator und am Telefon ausführen, hat die textLabel der Zelle den Hintergrund weiß. Ich möchte es klarstellen, weil ich möchte, dass die Hintergrundfarbe der Zelle voll ist, nicht ein Streifen, dann weiß, dann ein anderer Streifen.

In der init-Methode meiner benutzerdefinierten Zelle habe ich, in der Hoffnung, dass die weiße in rot, aber es hat keine Wirkung:

[self.textLabel setBackgroundColor:[UIColor redColor]]; 

ich auch versucht:

self.textLabel.backgroundColor = [UIColor redColor]; 

Das hat aber auch nicht funktioniert ... wenn ich ein UILabel als Unterview anlege, kann die Hintergrundfarbe des Labels eingestellt werden, aber das möchte ich nicht machen, denn wenn ich das Telefon rotiere, möchte ich meine Labels haben automatisch vergrößern.

Irgendwelche Ideen, warum das Einstellen der Hintergrundfarbe von cell.textLabel nicht funktioniert?

Danke

Antwort

23

Das Problem ist, dass UIKit die Zellenhintergrundfarbe in der Methode -setSelected setzt. Ich hatte die Methode aber hatte nicht self.textLabel.backgroundColor = [UIColor clearColor]; self.detailTextLabel.backgroundColor = [UIColor clearColor]; darin habe ich sie hinzugefügt und das Problem, das in dem Bild erwähnt wurde, wurde behoben.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 
    self.textLabel.backgroundColor = [UIColor clearColor]; 
    self.detailTextLabel.backgroundColor = [UIColor clearColor]; 
} 
0

eine klare Hintergrundfarbe setzen Sie Clear verwenden können:

[[cell textLabel] setBackgroundColor:[UIColor clearColor]]; 

Ist das, was Sie meinen?

+0

Ich habe das bereits getestet und es funktioniert nicht ... hier ist ein Link mit einem Screenshot meines Problems .. http://img269.imageshack.us/img269/9001/picture1wim.png. Das Etikett ist nicht von mir gemacht ist das in der UITableCell angeboten. irgendwelche Ideen, warum setBackgroundColor nicht funktionieren würde? –

+2

Ich stelle dort [UIColor redColor], um zu sehen, ob die Eigenschaft gesetzt ist..aber es wird ignoriert, es bleibt weiß ... –

0

siehe diesen Beitrag: How do I set UITableViewCellSelectionStyle property to some custom color?

in Ihrem Fall nur eine UIView mit weißer Hintergrundfarbe verwendet

+0

Ich denke, du hast mein Problem nicht verstanden ... das Problem ist nicht die Hintergrundfarbe der Zelle .. dass ich es einstellen kann, was auch immer ich will .. mein Problem ist, dass ich die Hintergrundfarbe der Zelle textLabel nicht einstellen kann. Wenn ich [[cell textLabel] setBackgroundColor: [UIColor redColor]]; Der Hintergrund dieses Labels bleibt weiß. Der Beitrag, auf den Sie zuvor verwiesen haben, bezieht sich auf die Änderung der Hintergrundfarbe der Zelle, wenn ich sie auswähle. Dafür möchte ich die Standardfarbe blau. –

+0

Wenn ich ein UILabel als Unteransicht hinzufüge, wird die Hintergrundfarbe nicht ignoriert. Für das eingebaute textLabel und detailTextLabel der Zelle werden die Eigenschaften, die ich für die Hintergrundfarbe einstelle, ignoriert ... –

+0

SorinA, Sie können die Hintergrundfarbe von textLabel sowie detailTextLabel in keiner der UITableViewDataSource-Protokollmethoden-Ausnahmen von "willDisplayCell" ändern Methode. Bitte beziehen Sie sich auf meinen vorherigen Beitrag, dort finden Sie die Lösung http://StackOverflow.com/Questions/1164459/changeing-uitablecell-textlabel-background-Color-To-Clear/2643451#2643451 –

0

ich es nicht probiert, aber hier ist eine Vermutung ... Um schneller die lichtundurchlässige Eigenschaft zu ziehen Die Beschriftung wird möglicherweise standardmäßig auf "True" gesetzt.

Versuchen

cell.titleLabel.opaque = NO; 
cell.titleLabel.backgroundColor = [UIColor clearColor]; 

Wenn das nicht entweder ich würde wahrscheinlich nur an dieser Stelle aufgeben funktioniert und meine eigenen UILabel für die Zelle erstellen.

+1

in OS 3.0 die Zelle doesn ' t antworte auf titelLabel. Ich habe versucht, was Sie mit cell.textLabel gesagt haben, aber der Effekt ist der gleiche .. danke –

0

um die Farbe der Textlabel zu setzen, sollten Sie folgendes tun: t.textColor = [UIColor colorYouWantRGB];

+0

Hallo Amelie, ich möchte die Hintergrundfarbe der Zelle Titel-Label zu deaktivieren, nicht um die Textfarbe des Etiketts zu setzen. –

47

Wenn Sie UITableViewCell nicht zu Unterklasse möchten, können Sie einfach hinzufügen:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [[cell textLabel] setBackgroundColor:[UIColor clearColor]]; 
    [[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]]; 
} 
+0

DANKE, ich wurde verrückt, als ich versuchte, dies an einem 3.x-Telefon zum Laufen zu bringen! – jv42

3

Sieht aus wie Apple hier etwas verändert.Genau dies in iOS4 funktioniert:

Zumindest bis zu dem Punkt, dass der Etikettenhintergrund ist transparent oder nimmt die Hintergrundfarbe. Es ist immer noch nicht möglich, eine eigene Hintergrundfarbe festzulegen.

Schön, dass dies behoben ist, aber ein wenig überraschend während der Tests, wenn Sie mit Basis SDK 4.1 und min entwickeln. Bereitstellung 3.1 für iPhone Classic und iPad.

Verwandte Themen