7

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

现在只是假设我一次只能在表格视图中显示两行:

|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

我怎样才能解决这个问题?我正在考虑手动执行此操作的方法,即通过检查是否应在重用时删除不必要的视图等,但可能更复杂,是否有更系统的方法更容易和更清洁?

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

谢谢

4

2 回答 2

10

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

在您的 customUITableViewCell中,您可以覆盖prepareForReuse和重置您想要的任何内容,或者在设置新内容时执行此操作。

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

于 2012-05-03T23:44:42.850 回答
8

我最近有一个类似的问题。在子类化 tableview 单元格修复它之后覆盖 prepareForReuse。从这里得到答案

于 2012-05-03T23:48:21.593 回答