Es gibt einen nervigen Fehler, den ich nicht beheben kann.UITableViewCell - wie man den Inhalt vor der Wiederverwendung zurücksetzt
Ich habe eine CustomCell
, und darin habe ich eine Unteransicht, die ihre Farbe nach Objekt Wert ändert.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"CustomCell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
MyObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
if ([object.redColor isEqualToNumber:[NSNumber numberWithBool:YES]]) {
cell.colorView.backgroundColor = [UIColor redColor];
}
else {
cell.colorView.backgroundColor = [UIColor clearColor];
}
return cell;
}
Das ist alles funktioniert gut, außer wenn ich eine Zeile mit redColor = YES
aus dem Tableview löschen, und ich blättere Zeilen zu zeigen, die nicht sichtbar waren. Die erste Zeile, die sichtbar wird (erste Zeile, die die wiederverwendbare Zelle wiederverwendet), hat eine rote Farbe, obwohl diese Zeile redColor = NO
ist. Und wenn ich wieder blättern und die Zelle ausblenden und dann wieder anzeigen, wird die Farbe auf clearColor gesetzt, so wie es sein sollte.
Ich denke, das liegt daran, dass es die gerade gelöschte Zelle wiederverwendet. Also versuche ich den Inhalt der Zelle vor der Wiederverwendung zurückzusetzen. In CustomCell.m
- (void)prepareForReuse {
[super prepareForReuse];
self.clearsContextBeforeDrawing = YES;
self.contentView.clearsContextBeforeDrawing = YES;
self.colorView.backgroundColor = [UIColor clearColor];
}
Aber das funktioniert nicht. Apple-Doc sagt
Die Delegierten Tabellenansicht in Tableview: cellForRowAtIndexPath: sollte immer alle Inhalte zurückgesetzt, wenn eine Zelle wiederverwendet.
Was ist der richtige Weg, um Inhalte zurückzusetzen? Muss ich Subviews aus der Superview entfernen?
Vielen Dank im Voraus
Hallo @SFF überprüfe meine Antwort. ,,, –