Estoy implementando una vista de tabla de selección de color donde el usuario puede seleccionar, por ejemplo, 10 colores (depende del producto). El usuario también puede seleccionar otras opciones (como la capacidad del disco duro, ...).
Todas las opciones de color están dentro de su propia sección de vista de tabla.
Quiero mostrar un pequeño cuadrado a la izquierda de la etiqueta de texto que muestra el color real.
En este momento estoy agregando un simple UIView cuadrado, darle el color de fondo correcto, como este:
- (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;
}
Esto se muestra bien sin problemas.
Mi único problema es que cuando selecciono una fila de "color", durante la animación de selección de fundido a azul, se oculta mi UIView (colorThumb) personalizada. Se vuelve a ver justo después de que finalizó la animación de selección / deselección, pero esto produce un feo artefacto.
¿Qué debo hacer para corregir esto? ¿No inserto la subvista en el lugar correcto?
(No hay nada especial en didSelectRowAtIndexPath, solo cambio el accesorio de la celda a una casilla de verificación o nada, y deselecciono el indexPath actual).