Подвид UITableViewCell исчезает при выделении ячейки - PullRequest
173 голосов
/ 19 июля 2011

Я реализую табличное представление с выбором цвета, где пользователь может выбрать, скажем, 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).

Ответы [ 21 ]

0 голосов
/ 10 июня 2016

Попробуйте следующий код:

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{     
[super setHighlighted:highlighted animated:animated];
//Set your View's Color here.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...