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.
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.
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];
}
+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.
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'.
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.
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.
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.
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
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.
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.
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];
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.
0 Stimmen
Möglicher Duplikat: stackoverflow.com/questions/281515/…
1 Stimmen
@willcodejavaforfood das ist ein sehr unhilfreicher Kommentar und hat nichts mit der Frage des OPs zu tun