2010-11-10 6 views
30

ich geschaffen habe eine Reihe von Zellen, die wiederverwendet werden in einer Tabellenansicht festlegen. Alle diese Zellen haben nur verschiedene UILabel s in ihnen und einige UIImageView s (nichts deckt die komplette Zelle).Kann nicht die Hintergrundfarbe von UITableViewCell in IB

die Hintergrundfarbe in IB Einstellung hat keine Auswirkung (immer weiß oder transparent, kann nicht sagen, was man von ihnen). Aber wenn ich Command-R (Simulate Interface) drücke, hat die Zelle die korrekte Hintergrundfarbe im Simulator.

Ich versuchte es in tableView:cellForRowAtIndexPath: zu setzen, aber es funktioniert nicht, wie ich entweder denken würde.

Dies funktioniert der Trick:

cell.contentView.backgroundColor = [UIColor redColor]; 

aber diese haben keine Wirkung (auch wenn ich die cell.contentView.backgroundColor-clearColor eingestellt):

cell.backgroundView.backgroundColor = [UIColor redColor]; 

cell.backgroundColor = [UIColor redColor]; 

habe ich die ganze Layout/font/Hintergrund-Material in IB. Irgendeine Idee, warum das in diesem Fall nicht funktioniert?

Warum muss ich die contentView ‚s backgroundColor und nicht die backgroundView‘ s ändern?

Es scheint ein verbreitetes Problem zu sein. Könnte mir bitte jemand in die richtige Richtung zeigen, um (endlich) zu verstehen, wie Hintergrundfarben in einer Tabellenansichtszelle gehandhabt werden.

Antwort

1

Es gibt eine einfachere Lösung: Wenn Sie in Interface Builder ein UITableViewCell erstellen, ziehen Sie einfach eine zusätzliche UIView, so dass es die gesamte UITableViewCell abdeckt, die Sie in IB erstellen. Legen Sie Ihre zusätzlichen UI-Elemente auf diese zusätzliche UIView. Sie können dieses zusätzliche UIView auf den von Ihnen gewünschten Hintergrund einstellen.

Es gibt durchaus ein paar Antworten auf Stackoverflow, dass Sie die Hintergrundfarbe Ihrer UITableViewCell durch eine Codezeile ändern vorschlagen, mit wie diese:

cell.contentView.backgroundColor = [UIColor redColor]; 

Wenn Sie einen Schlagschatten auf Ihr Handy hinzufügen indem Wenn Sie die Rahmengröße von contentView etwas ändern, werden Sie feststellen, dass diese Linie sowohl die Hintergrundfarbe Ihrer Zelle als auch die Farbe Ihres Schlagschattenbereichs verändert.

51

Um die Hintergrundfarbe der Zelle zu ändern, müssen Sie es in der willDisplayCell tun: forRowAtIndexPath: Methode. Dies ist in der UITableViewCell documentation oben in einer Boxnote erwähnt. Sie müssen also:

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

Die content ist nur die empfohlene subview in benutzerdefinierten Kontrollen setzen, so dass die Zelle richtig gelegt wird, wenn Tabellenbearbeitung vor sich geht.

+2

thx für die Info. Aber warum funktioniert die Einstellung im IB nicht? ich setze nur den label.text in den controller. und das Setzen des Hintergrund-IB funktioniert in allen Nibs (UIView), aber nicht mit UITableViewCell. – klemens

+0

Momentan kann dies nicht bestätigt werden, aber UITableViewCell scheint ein Sonderfall zu sein.In der Apple-Dokumentation für willDisplayCell und kundenspezifischen Zellen, erwähnt sie diese Methode zu verwenden, die aufgerufen wird, „nach der Tabellenansicht basierend auf Auswahl Farben Einstellung erfolgt, etc“. Es kann funktionieren, wenn Sie eine benutzerdefinierte Unterklasse von UITableViewCell in Code erstellen, aber nicht in der Lage es jetzt zu überprüfen. – Anna

+0

ok, so dass ich es nur in Code auf. Danke für Ihre hervorragende Hilfe. – klemens

Verwandte Themen