标签在我的可重复使用的表格单元格中挥之不去

时间:2012-03-06 22:08:15

标签: ios uitableview uilabel cell

我有一个表格,其单元格包含标签。每当我将一个可重复使用的单元格出列时,旧标签仍然会留在它上面。我能够用它删除它们:

    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 个答案:

答案 0 :(得分:3)

UITableViewCell子类(如果你还没有)。覆盖prepareForReuse并删除那里的标签。可能会工作

答案 1 :(得分:1)

当您在cellForRowAtIndexPath:中向您的单元格添加子视图时,无论其是否已出列或新创建,都会出现此类问题。因此,每次重复使用行时,您最终都会创建一个新的子视图,并且旧的子视图会累积。

您想要做的是每次都使用相同的子视图,但每次只需设置相关的属性(例如标签或颜色)。查看How do I clear a cell completely when I reuse it?的答案,了解一些可能的方法。

答案 2 :(得分:0)

我有点做了Yuji建议的。我没有在每次迭代中添加新标签,而是检查单元格是否包含标签,然后编辑标签,如果它们在那里,或者如果它们不是,则将它们放入。代码是这样的:

    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
}