Sto implementando una vista della tabella di selezione dei colori in cui l'utente può selezionare, diciamo, 10 colori (dipende dal prodotto). L'utente può anche selezionare altre opzioni (come la capacità del disco rigido, ...).
Tutte le opzioni di colore sono all'interno della propria sezione di visualizzazione tabella.
Voglio visualizzare un quadratino a sinistra del textLabel che mostra il colore effettivo.
In questo momento sto aggiungendo un semplice UIView quadrato, dandogli il colore di sfondo corretto, in questo modo:
- (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;
}
Questo visualizza bene senza problemi.
Il mio unico problema è che quando seleziono una riga "color", durante l'animazione della selezione da dissolvenza a blu, la mia UIView personalizzata (colorThumb) viene nascosta. Viene nuovamente visualizzato subito dopo la fine dell'animazione di selezione / deselezione, ma questo produce un brutto artefatto.
Cosa devo fare per correggere questo? Non inserisco la sottoview nel posto giusto?
(Non c'è niente di speciale in didSelectRowAtIndexPath, cambio semplicemente l'accessorio della cella in una casella o niente e deseleziono l'indicePath corrente).