ios uitableview uitableviewcell重用旧数据

use*_*019 6 scroll uitableview ios

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

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

|a0|a1|a2 |a3 |
|b4|b5|b6 |b7 |
------cell c not visible to user------
|c8|c9|c10|c11|
Run Code Online (Sandbox Code Playgroud)

当用户向下滚动时,上面的列'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|
Run Code Online (Sandbox Code Playgroud)

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

|a0|a1|a2 |a3 |
------row/cell 'a' not visible to user------
|b4|b5|b6 |b7 |
|c8|c9|a2|a3|
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

And*_*Ley 10

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

在您的自定义中UITableViewCell,您可以覆盖prepareForReuse和重置您喜欢的任何内容,或在设置新内容时执行此操作.

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


use*_*234 8

我最近有一个类似的问题.在子视图后覆盖prepareForReuse tableview单元修复它.从这里得到了答案

  • 抱歉,necro,请向原作者或社区提出问题:阅读 Apple 的开发人员文档 https://developer.apple.com/documentation/uikit/uitableviewcell/1623223-prepareforreuse 它说不要处理prepareForReuse中的内容相关材料,而是 cellForRowAt。有人对为什么接受的答案与官方文档冲突有任何解释吗? (2认同)