2017-09-04 31 views
0

我有一长串textfields,所以我使用了tableView。当编辑一个单元格时,Swift tableview会更改随机单元格的值

this is how the screen looks like

当我插入一个文本框在其中一个单元格一些文字,然后向下滚动其他一些细胞得到相同的文本框的值。我不知道为什么会发生这种情况。

这是我现在的代码:

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 

} 
+0

你如何处理文本字段的编辑?请提供更多的上下文。 –

+0

@DávidPásztor目前我没有对文本框进行任何操作,只需键入其中一个文本框,并在向下滚动时在不同单元格中显示相同的文本 –

回答

1

你的主要问题是要保持内部视图(UITableVieCell)数据。如果你的表中有1milion行,只有少量的UITableViewCells在内存中(通常在屏幕上可见)。

当您致电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

0

基本上,你必须得到和值存储在视图 - 控制器,因为由于UITableViewCell的可重用行为,您失去了所有子引用的不可见单元的引用。

因此,您可以通过RelatieToevoegenCell类中的textViewDidChange操作存储文本字段值。

相关问题