Je me suis mise en œuvre d'une couleur-sélecteur de vue de la table où l'utilisateur peut choisir entre, disons, 10 couleurs (dépend du produit). L'utilisateur peut également choisir d'autres options (comme la capacité du disque dur, ...).
Toutes les options de couleurs sont à l'intérieur de leur propre tableview section.
Je veux afficher une petite place sur la gauche de la textLabel montrant la couleur réelle.
Maintenant, je suis en ajoutant un simple carré UIView, donner de la bonne couleur d'arrière-plan, comme ceci :
- (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;
}
Cette affiche très bien sans problèmes.
Mon seul problème est que lorsque je sélectionne une "couleur" de la ligne, au cours de la fondu au bleu de sélection de l'animation, de mon custom UIView (colorThumb) est caché. Il obtient de nouveau visible juste après la sélection/désélection de l'animation terminée, mais cela produit un vilain artefact.
Que dois-je faire pour corriger cela? N'ai-je pas insérer la sous-vue à la bonne place?
(Il n'y a rien de spécial dans le didSelectRowAtIndexPath, je viens de changer la cellule est accessoire à une case à cocher ou rien, et désélectionnez l'actuel indexPath).