Я реалізую таблицю вибору кольорів, де користувач може вибрати, скажімо, 10 кольорів (залежить від продукту). Користувач також може вибрати інші параметри (наприклад, ємність жорсткого диска, ...).
Усі параметри кольорів знаходяться у власному розділі перегляду таблиці.
Я хочу відобразити невеликий квадрат зліва від textLabel із зображенням фактичного кольору.
Зараз я додаю простий квадрат UIView, надаю правильний колір тла, як це:
- (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;
}
Це відображається нормально без проблем.
Моя єдина проблема полягає в тому, що коли я вибираю "кольоровий" рядок, під час анімації вицвілого до синього кольору мій користувацький UIView (colorThumb) приховується. Він стає видимим знову після закінчення анімації вибору / відміни, але це створює потворний артефакт.
Що мені робити, щоб це виправити? Чи не я вставляю підвід в потрібне місце?
(У didSelectRowAtIndexPath немає нічого особливого, я просто змінюю аксесуар комірки на прапорець або нічого і зніміть позначку з поточного indexPath).