在我的应用程序上,一旦我点击打开我的所有单元格,它们都被tableView委派的方法加载到函数中:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> MyClassName {...}
因此,每次加载单元格时,都会调用此方法。 第一次正确加载(所有细胞都有黑色背景)
当我下载屏幕并加载一些不同的单元格时,它也会正确地遵循我的代码并加载具有白色背景的单元格。
当我回到顶端时,问题就出现了。
它就像白色背景细胞的数量一样被提升,使得一旦黑色背景的细胞变成白色(这不是我想要的)。我以为一旦单元格被加载到屏幕上,它应该留在设备的内存中。
我在代码上放了一些打印件来检查它们是否不正确,但显然它们工作正常。
所以我问你,你们中间有没有这类问题或类似问题?你认为这是一个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
}
答案 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()
并在那里恢复您的属性。