Ich implementiere eine Farbauswahl-Tabellenansicht, in der der Benutzer beispielsweise zwischen 10 Farben auswählen kann (abhängig vom Produkt). Der Benutzer kann auch andere Optionen auswählen (z. B. Festplattenkapazität, ...).
Alle Farboptionen befinden sich in einem eigenen Tabellenansichtsbereich.
Ich möchte links neben dem textLabel ein kleines Quadrat mit der tatsächlichen Farbe anzeigen.
Im Moment füge ich ein einfaches quadratisches UIView hinzu und gebe ihm die richtige Hintergrundfarbe wie folgt:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:RMProductAttributesCellID];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:RMProductAttributesCellID] autorelease];
cell.indentationWidth = 44 - 8;
UIView *colorThumb = [[[UIView alloc] initWithFrame:CGRectMake(8, 8, 28, 28)] autorelease];
colorThumb.tag = RMProductAttributesCellColorThumbTag;
colorThumb.hidden = YES;
[cell.contentView addSubview:colorThumb];
}
RMProductAttribute *attr = (RMProductAttribute *)[_product.attributes objectAtIndex:indexPath.section];
RMProductAttributeValue *value = (RMProductAttributeValue *)[attr.values objectAtIndex:indexPath.row];
cell.textLabel.text = value.name;
cell.textLabel.backgroundColor = [UIColor clearColor];
UIView *colorThumb = [cell viewWithTag:RMProductAttributesCellColorThumbTag];
colorThumb.hidden = !attr.isColor;
cell.indentationLevel = (attr.isColor ? 1 : 0);
if (attr.isColor) {
colorThumb.layer.cornerRadius = 6.0;
colorThumb.backgroundColor = value.color;
}
[self updateCell:cell atIndexPath:indexPath];
return cell;
}
Dies wird problemlos angezeigt.
Mein einziges Problem ist, dass meine benutzerdefinierte UIView (colorThumb) ausgeblendet wird, wenn ich während der Auswahlanimation "Ausblenden" eine "Farb" -Zeile auswähle. Es wird unmittelbar nach dem Ende der Auswahl- / Abwahlanimation wieder sichtbar, dies führt jedoch zu einem hässlichen Artefakt.
Was soll ich tun, um dies zu korrigieren? Füge ich die Unteransicht nicht an der richtigen Stelle ein?
(Der didSelectRowAtIndexPath enthält nichts Besonderes. Ich ändere einfach das Zubehör der Zelle in ein Kontrollkästchen oder nichts und deaktiviere den aktuellen indexPath.)