在我的tableview中,我将subview添加到某个单元格中。如果单元格数大于一个屏幕的高度,例如,屏幕可以包含10个单元格,如果滚动到11个单元格,第一个单元格将消失。返回顶部时,即使没有单元格,第一个单元格也会显示子视图。
是因为子视图浮动吗?
答案 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行,所以看起来不错。