UITableViewController,单元格重新加载不正确

时间:2017-10-25 22:49:27

标签: swift uitableview cell

在我的应用程序上,一旦我点击打开我的所有单元格,它们都被tableView委派的方法加载到函数中:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> MyClassName {...}

因此,每次加载单元格时,都会调用此方法。 第一次正确加载(所有细胞都有黑色背景)

image1

当我下载屏幕并加载一些不同的单元格时,它也会正确地遵循我的代码并加载具有白色背景的单元格。

image2

当我回到顶端时,问题就出现了。

image3

它就像白色背景细胞的数量一样被提升,使得一旦黑色背景的细胞变成白色(这不是我想要的)。我以为一旦单元格被加载到屏幕上,它应该留在设备的内存中。

我在代码上放了一些打印件来检查它们是否不正确,但显然它们工作正常。

所以我问你,你们中间有没有这类问题或类似问题?你认为这是一个iOS错误吗?

已编辑,添加代码:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> HistoricoSelectedCell {
    let cell2 = tableView.dequeueReusableCell(withIdentifier: "historicoCell", for: indexPath) as! HistoricoSelectedCell

    let item = itemChosen[indexPath.row].item
    let cell = self.configureCell(cell: cell2, indexPath: indexPath, item: item!)

    return cell
}

1 个答案:

答案 0 :(得分:0)

这是一个细胞重用问题。

您通过调用func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell来生成要在tableView.dequeueReusableCell(withIdentifier: <identifier string>, for: indexPath)中使用的新单元格。我认为(您确实需要使用您的问题发布代码)。

您获得的单元格将被重用,因为它不会从头开始实例化,但已经创建并用于其他单元格。

您的选择是:

1)在cellForRowAt indexPath方法中设置所有必要的属性。

2)创建一个fund configure(cell: UITableViewCell)函数,用于设置适当的属性

3)覆盖UITableViewClass中的prepareForReuse()并在那里恢复您的属性。