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

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

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)]; 

但它没有用。 如何使旧标签从所选单元格以及单元格的常规视图中消失?

当您将子视图添加到cellForRowAtIndexPath:的单元格时,往往会发生这种问题cellForRowAtIndexPath:无论它是否已出列或新创建。 因此,每次重复使用行时,您最终都会创建一个新的子视图,并且旧的子视图会累积。

你想要做的是每次使用相同的子视图,但每次只设置相关的属性(例如,标签或颜色)。 查看我重复使用时如何完全清除单元格的答案? 看一些可能的方法。

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

我有点做了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 }