35 Stimmen

Einstellen der Hintergrundfarbe einer Tabellenansichtszelle auf dem iPhone

Ich möchte den Effekt erzielen, dass eine Zelle der Tabellenansicht einen blauen Hintergrund hat, die nächste weiß ist, die nächste wieder blau und dann wieder weiß und so weiter... Könnten Sie mir mitteilen, wie ich das machen kann?

Vielen Dank.

0 Stimmen

1 Stimmen

@willcodejavaforfood das ist ein sehr unhilfreicher Kommentar und hat nichts mit der Frage des OPs zu tun

73voto

jessecurry Punkte 21963

Füge diese Methode zu deinem Tabellenansicht-Delegate hinzu:

#pragma mark UITableViewDelegate
- (void)tableView: (UITableView*)tableView 
  willDisplayCell: (UITableViewCell*)cell 
forRowAtIndexPath: (NSIndexPath*)indexPath
{
    cell.backgroundColor = indexPath.row % 2 
        ? [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] 
        : [UIColor whiteColor];
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.backgroundColor = [UIColor clearColor];
}

3 Stimmen

+1 Dies hat funktioniert und war der einzige Weg, um die Einstellung textLabel.backgroundColor beizubehalten. Das Einstellen in tableView:cellForRowAtIndexPath hat bei mir nicht funktioniert (OS 3.2), aber dies hat es getan.

2 Stimmen

Es gibt ein altes WWDC-Video aus dem Jahr 2009 oder 2010, das dies behandelt. Die Tabellenansicht passt den Hintergrund an, um die Auswahlzustände der Zellen zu verwalten. Deshalb ist der einzige Ort, an dem Sie sie zuverlässig ändern können, die Methode 'willDisplayCell'.

0 Stimmen

Versteht jemand, warum das Setzen davon in CellForRowAtIndex nicht richtig funktioniert? Ich habe es in dieser Methode versucht, aber %2 funktioniert nicht richtig für jede zweite Zeile. Und wenn Sie ein paar Mal nach oben und unten scrollen, ändert sich der Hintergrund jeder Zelle. WillDisplayCell funktioniert jedoch, frage mich nur, warum es für CellForRow nicht funktioniert.

43voto

lostInTransit Punkte 69377

Sie müssen die Hintergrundfarbe der Inhaltsansicht der Zelle einstellen

cell.contentView.backgroundColor = [UIColor colorWithRed...]

Dies wird den Hintergrund der gesamten Zelle festlegen.

Um dies für alternative Zellen zu tun, verwenden Sie indexPath.row und % by 2.

0 Stimmen

Vielen Dank für Ihre Antwort. Ich habe das ausprobiert, aber es zeigt nur zwei Enden der Zelle als blau/orange an, aber ich wollte, dass die ganze Zelle die Farbe hat.

2 Stimmen

Sie Sie erhalten die Enden als blau/orange, wenn Sie cell.backgroundColor verwenden. Wenn Sie cell. contentView.backgroundColor verwenden, wird die gesamte Zelle eingefärbt, es sei denn, Sie haben Steuerelemente in Ihrer Zelle (wie ein Label), die einen weißen Hintergrund haben. In diesem Fall müssen Sie auch deren Hintergrundfarbe ändern. Andernfalls hat die Methode contentView.backgroundColor bis jetzt für mich funktioniert.

0 Stimmen

Ich bin hierher gekommen, um herauszufinden, wie man die Hintergrundfarbe der gesamten Zelle ändert, aber die gestellte Frage ist nicht genau damit verbunden, aber diese Antwort hat für mich funktioniert. Danke

9voto

gamozzii Punkte 3901

Wenn Sie die Zellenfarbe basierend auf dem Zustand im tatsächlichen Zellendatenobjekt festlegen möchten, dann ist dies ein weiterer Ansatz:

Wenn Sie diese Methode zu Ihrem Tabellenansicht-Delegierten hinzufügen:

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

Dann können Sie in Ihrer cellForRowAtIndexPath-Methode Folgendes tun:

if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) {
    cell.contentView.backgroundColor = [UIColor blueColor];
}

Dies erspart Ihnen das erneute Abrufen Ihrer Datenobjekte in der willDisplayCell-Methode.

1 Stimmen

Ich habe festgestellt, dass dieser Ansatz auch vermeidet, mit den Hintergründen der Textlabels herumzuspielen - die tableView scheint sie automatisch anzupassen, um zum Hintergrund der Zelle zu passen. Für meinen Anwendungsfall ist dies die einfachste Lösung unter den hier vorgestellten Antworten.

6voto

safil sunny Punkte 106

Bitte fügen Sie den folgenden Code in der cellForRowAtIndexPath Methode hinzu

if (indexPath.row % 2 == 0){
    cell.backgroundColor =[UIColor blueColor];
} else {
    cell.backgroundColor =[UIColor whiteColor];
}

Ich denke, das wird Ihnen helfen

4voto

henning77 Punkte 3804

Die cell.contentView.backgroundColor = [UIColor colorWithRed...] Methode in lostInTransits Antwort funktioniert, solange Sie nicht das eingebaute Label einer UITableViewCell verwenden.

Ich habe festgestellt, dass wenn Sie das eingebaute Label verwenden, z.B. durch Einstellen von cell.text, erhalten Sie einen undurchsichtigen weißen Block unter dem Label und nur die beiden Enden der Zelle zeigen Ihre gewünschte Farbe.

Ich habe keinen Weg gefunden, das eingebaute Label so zu bearbeiten, dass es undurchsichtig wird (Sie können darauf zugreifen über UILabel* cellLabel = [cell.contentView.subviews objectAtIndex:0]).

Ich habe das Problem gelöst, indem ich mein eigenes benutzerdefiniertes UILabel hinzufüge. So:

UILabel* cellLabel = [[[UILabel alloc] initWithFrame:cell.frame] autorelease];
cellLabel.text = "Test mit nicht undurchsichtigem Label";
cellLabel.backgroundColor = [UIColor clearColor];
cellLabel.opaque = NO;

[cell.contentView addSubview:cellLabel];
cell.contentView.backgroundColor = [UIColor darkGrayColor];

0 Stimmen

Sie sollten kein Label erstellen und die Hintergrundfarbe ändern, wenn Sie einfach die Hintergrundfarbe der Zelle ändern können. cell.backgroundColor = [UIColor ...]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X