177 votes

UITableViewCell sous-vue disparaît lorsque la cellule est sélectionnée

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).

121voto

Andriy Points 1464

C’est parce que la cellule de tableau vue modifie automatiquement la couleur d’arrière-plan de toutes les vues à l’intérieur de l’affichage du contenu pour l’état sélectionné. Vous pouvez envisager le sous-classement dessiner votre couleur ou à l’aide de personnalisé 1 x 1 avec px étiré image.

9voto

Agat Points 1607

Une autre façon de gérer le problème consiste à remplir la vue avec dégradé de base-graphiques, comme :

3voto

DylanVann Points 126

UITableViewCell modifie la couleur de fond de toutes les sous-vues sélectionnées pour une raison quelconque.

Cela pourrait aider:

DVColorLockView

Utilisez quelque chose comme ça pour empêcher UITableView de changer la couleur de votre vue pendant la sélection.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X