Estou implementando uma exibição de tabela de seleção de cores em que o usuário pode selecionar, por exemplo, 10 cores (depende do produto). O usuário também pode selecionar outras opções (como capacidade do disco rígido, ...).
Todas as opções de cores estão dentro de sua própria seção de tableview.
Quero exibir um pequeno quadrado à esquerda do textLabel mostrando a cor real.
No momento, estou adicionando um UIView quadrado simples, fornecendo a cor de fundo correta, desta forma:
- (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;
}
Isso é exibido sem problemas.
Meu único problema é que, quando seleciono uma linha "colorida", durante a animação de seleção de desbotamento para azul, meu UIView personalizado (colorThumb) fica oculto. Torna-se visível novamente logo após o término da animação de seleção / desmarcação, mas isso produz um artefato feio.
O que devo fazer para corrigir isso? Não insiro a subvisão no lugar certo?
(Não há nada de especial no didSelectRowAtIndexPath, basta alterar o acessório da célula para uma caixa de seleção ou nada e desmarcar o indexPath atual).