当编辑一个单元格时,Swift tableview会更改随机单元格的值

我有很长的文本字段列表,所以我使用的是tableView。

这就是屏​​幕的样子

当我在其中一个单元格的文本字段中插入一些文本并向下滚动其他一些单元格时,获得相同的文本字段值。 我不知道为什么会这样。

这是我现在的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! RelatieToevoegenCell cell.label.text = items[indexPath.row] cell.textfield.placeholder = items[indexPath.row] return cell } 

您的主要问题是您将数据保存在Views(UITableVieCell)中。

UITableView重用单元格以优化性能 – 因此,即使表中有1milion行,内存中只有少量UITableViewCells(通常在屏幕上可见多少)。

当您调用dequeueReusableCell它会占用一个已存在的单元dequeueReusableCell用它。

要解决此问题,您需要将数据单独保存在数组中并在其中保留修改后的文本。 然后,您需要修改您发布的代码,以便在每次从“dataSource”配置UITableView时获取数据。

另外一个好的方法是在重用时重置UITableViewCell,你可以通过在prepareForReuse中添加编码来实现这一点 – 但这是可选的,因为文本将从你的数据源中设置。

我还建议你在开始进一步编码之前阅读它 – 它将允许理解UITableView如何在iOS上运行:

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW1

基本上,您必须在视图控制器中获取UITableViewCell因为由于UITableViewCell的可重用行为,您丢失了具有所有子引用的不可见单元格的引用。

因此,您可以通过RelatieToevoegenCell类中的RelatieToevoegenCell操作存储text-field值。