J'implémente une vue de table de sélection de couleurs où l'utilisateur peut sélectionner parmi, par exemple, 10 couleurs (dépend du produit). L'utilisateur peut également sélectionner d'autres options (comme la capacité du disque dur, ...).
Toutes les options de couleur se trouvent dans leur propre section d'affichage de table.
Je veux afficher un petit carré à gauche du textLabel montrant la couleur réelle.
En ce moment, j'ajoute un simple UIView carré, donnez-lui 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;
}
Cela affiche bien sans problèmes.
Mon seul problème est que lorsque je sélectionne une ligne "couleur", lors de l'animation de sélection de fondu au bleu, mon UIView personnalisé (colorThumb) est masqué. Il redevient visible juste après la fin de l'animation de sélection / désélection, mais cela produit un artefact laid.
Que dois-je faire pour corriger cela? Est-ce que je n'insère pas la sous-vue au bon endroit?
(Il n'y a rien de spécial dans le didSelectRowAtIndexPath, je change simplement l'accessoire de la cellule en une case à cocher ou rien et désélectionne l'indexPath actuel).
la source