Я реализую представление таблицы color-chooser, где пользователь может выбрать, например, 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;
}
Это нормально отображается без проблем.
Моя единственная проблема заключается в том, что, когда я выбираю строку "color", во время анимации выделения fade-to-blue мой пользовательский UIView (colorThumb) скрыт. Он становится видимым снова сразу после окончания анимации выбора/отмены, но это вызывает уродливый артефакт.
Что мне делать, чтобы исправить это? Не вставлять ли подпункт в нужное место?
(Нет ничего особенного в didSelectRowAtIndexPath, я просто меняю принадлежность ячейки на флажок или ничего и отменяю выделение текущего indexPath).