contentView子视图保持在屏幕上

时间:2011-10-28 10:45:04

标签: iphone uitableview

在我的tableview中,我将subview添加到某个单元格中。如果单元格数大于一个屏幕的高度,例如,屏幕可以包含10个单元格,如果滚动到11个单元格,第一个单元格将消失。返回顶部时,即使没有单元格,第一个单元格也会显示子视图。

是因为子视图浮动吗?

3 个答案:

答案 0 :(得分:0)

这是因为正在重复使用单元格,以节省内存。当您滚动表格视图时,它将重复使用被推离屏幕的相同单元格。如果其中一些包含子视图,则子视图也可能会被重复使用并显示在错误的位置。

如果要将子视图添加到单元格的contentView,请务必在tag中标记UIView属性)并使用[cell.contentView viewWithTag:YOUR_TAG_ID]获取它们并执行任何操作你想要它们(即如果它不应该在你的新单元格中,则删除子视图)。

示例(在某些单元格中添加了UITextField):

// try to get the text field from the cell
textField = (UITextField*)[cell.contentView viewWithTag:kTABLE_CELL_TAG_TEXTFIELD];

if (textField) {
    // remove it if it already exists
    [textField removeFromSuperview];
}

答案 1 :(得分:0)

要避免此类行为,您可以在添加新子视图之前删除单元格的所有视图。

for (UIView *view in cell.contentView.subviews)
{
    [view removeFromSuperview];
}

答案 2 :(得分:-1)

通过为每个单元格设置唯一的reuseIdentifier来固定,这样tableview就无法重用单元格。我的表视图应该在100行,所以看起来不错。