2012-05-03 43 views
5

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

现在只是假设我只能在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,而不是

我该如何解决这个问题?我正在考虑手动执行此操作的方式,即通过检查重复使用时是否应删除不必要的视图等,但可能会更复杂 是否有更系统的方法可以更轻松,更清洁?

有没有一种方法可以让返回的单元格忘记它的内容,还是我必须自己做这个?

谢谢

回答

7

我最近有一个类似的问题。在tableview单元格的子类修复它后,重写prepareForReuse。从here得到的答案

+0

对不起,请将问题追溯到原始作者或社区:阅读Apple的开发者文档,网址为https://developer.apple.com/documentation/uikit/uitableviewcell/1623223-prepareforreuse它表示不要处理prepareForReuse中的内容相关材料,而是处理cellForRowAt。 有没有人有任何解释为什么接受的答案与官方文档冲突? –

9

你必须“自己动手”。无论何时重用UITableViewCell,它都会保留其以前的内容。如果你希望它被重置/清除,你必须手动完成。

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

在你的情况下,在所有四列中设置UIImageView的image属性为nil应该工作。

相关问题