Ярлыки остаются в моих многоразовых табличных ячейках - PullRequest
1 голос
/ 07 марта 2012

У меня есть таблица, ячейки которой содержат метки.Всякий раз, когда я снимаю с полки многоразовую ячейку, старые ярлыки все еще остаются на ней.Я смог удалить их с помощью этого:

    for(int a=[[newcell subviews]count]-1; a>=0;a--)
    {
        if([[[[newcell subviews]objectAtIndex:a]class] isSubclassOfClass:[UILabel class]])
        {
            [[[newcell subviews] objectAtIndex:a] removeFromSuperview];
        }
    }

Но когда я выбираю ячейку, я вижу старый текст поверх новой.Я попробовал это:

    [[newcell.selectedBackgroundView subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];
    [[newcell.backgroundView subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];

Но это не сработало.Как можно сделать так, чтобы старые метки исчезали из выбранной ячейки, а также из обычного вида ячейки?

Ответы [ 3 ]

3 голосов
/ 07 марта 2012

Подкласс UITableViewCell (если вы еще этого не сделали). Переопределите prepareForReuse и удалите метки там. Мог бы работать

1 голос
/ 07 марта 2012

Такая проблема обычно возникает, когда вы добавляете подпредставления в свои ячейки в cellForRowAtIndexPath: независимо от того, удаляется ли это из очереди или только что было создано.В результате вы в конечном итоге создаете новое подпредставление каждый раз, когда строка повторно используется, и старые подпредставления накапливаются.

Вместо этого вы хотите использовать одно и то же подпредставление каждый раз, а просто установить соответствующийатрибуты (например, метки или цвет) каждый раз.Ознакомьтесь с ответами на Как полностью очистить ячейку при повторном ее использовании? , чтобы увидеть некоторые возможные подходы.

0 голосов
/ 08 марта 2012

Я сделал то, что предложил Юджи.Вместо того, чтобы вставлять новые метки на каждой итерации, я проверял, содержит ли ячейка метки, а затем либо редактировал метки, если они были, либо вставлял их, если их не было.Код выглядит так:

    if([[newcell.contentView subviews] count]>=2 && [[[[newcell.contentView subviews] objectAtIndex:0]class] isSubclassOfClass:[UILabel class]] && 
   [[[[newcell.contentView subviews] objectAtIndex:1]class] isSubclassOfClass:[UILabel class]])
{
    //change the text of the labels
}
else
{
    //add the labels to the cell
}
...