ios uitableview uitableviewcell重用旧数据

时间:2012-05-03 23:26:27

标签: ios uitableview scroll

我们都知道可以恢复uitableview中的单元格,但我看到了一些奇怪的结果。 我正在创建一个自定义单元格,每个单元格有4列,每列都有一个图像 所以格式是这样的 | IMG |张图片|张图片| IMG | 返回单元格后,我正在配置每个单元格,一个例子是将第一列配置为图片1,然后将第二列配置为不同的图片

现在假设我只能在tableview中一次显示两行:

|a0|a1|a2 |a3 |
|b4|b5|b6 |b7 |
------cell c not visible to user------
|c8|c9|c10|c11|

当用户向下滚动时,上面的列'a'(a0-a3)将变为不可见,并且据我所知,单元格变为不可见将被重用于列c

上面的例子工作正常,如果我可以完全占据每个单元格/行,即我总共有12张图片。

但如果我说了10张图片(最后一行只会填充2张,而另外两张是空的,如下所示:

|a0|a1|a2 |a3 |
|b4|b5|b6 |b7 |
------row/cell 'c' not visible to user------
|c8|c9|empty|empty|

然而,当我向上滚动以查看单元格/行'c'时出现问题 我有以下图片:

|a0|a1|a2 |a3 |
------row/cell 'a' not visible to user------
|b4|b5|b6 |b7 |
|c8|c9|a2|a3|

请注意,行/单元格c的最后两列应为空,但显示的是a2和a3

我该如何解决这个问题?我正在考虑一种手动方式,即通过检查是否应该在重用时删除不必要的视图等,但可能更复杂 有没有更系统的方法来做到这一点更简单,更清洁?

有没有办法可以让返回的单元格忘记其内容,或者我自己必须这样做?

感谢

2 个答案:

答案 0 :(得分:10)

你必须“自己动手”。每当重用UITableViewCell时,它都会保留其先前的内容。如果要重置/清除它,可以手动执行此操作。

在自定义UITableViewCell中,您可以覆盖prepareForReuse并重置您想要的任何内容,或在设置新内容时执行此操作。

在您的情况下,在所有四列中将UIImageView的image属性设置为nil应该有效。

答案 1 :(得分:8)

我最近遇到了一个类似的问题。在子视图后覆盖prepareForReuse tableview单元修复它。得到了here

的答案