Swift - uitableview 重用单元格时用户输入混淆?
Posted
技术标签:
【中文标题】Swift - uitableview 重用单元格时用户输入混淆?【英文标题】:Swift - User input mixed up when uitableview reuses cells? 【发布时间】:2015-09-01 19:56:42 【问题描述】:我目前正在开发一个应用程序,该应用程序具有 UITableView 和包含 UITextField 的自定义单元格。我遇到的问题是,在用户向文本字段输入数字后,滚动时,tableView 会重用该单元格,并且用户之前的输入会在新单元格中初始化。例如,如果我将数字 7 放在顶部单元格的文本字段中,当我滚动时,最新的单元格中已经有一个 7。我想知道如何解决这个问题?感谢您的帮助。
编辑:由于我的问题不清楚,我基本上需要一种方法让我的 UITableViewCell 与我的 UITableViewController 中的模型“对话”,这样当用户完成编辑单元格中的 UITextField 时,我可以将输入保存到我的视图控制器中的数组。再次感谢
【问题讨论】:
保存该索引路径的条目并在 cellForRow 中设置文本字段 【参考方案1】:在您的单元格子类中覆盖 -prepareForReuse
。
在该方法中,将您的文本设置为nil
,然后调用super.prepareForReuse
【讨论】:
这个为我节省了很多时间。很少,谢谢,伙计。【参考方案2】:快速解决方法是创建一个整数数组来表示表中的数字。 然后,在 cellForRowAtIndexPath 方法中,只需执行类似
的操作cell.textField.text = numberArray[indexPath.row]
您现在需要将文本字段数据实际保存到此数组中,使用相同的方法添加
cell.textField.addTarget(self, action: "onTextChanged:", forControlEvents: UIControlEvents.EditingChanged)
像这样创建 ,,onTextChanged'' 方法
func onTextChanged(sender: UITextField)
let cell = sender.superview! as! UITableViewCell
let indexPath = self.tableView.indexPathForCell(cell)!
numberArray[indexPath.row] = sender.text.toInt()!
【讨论】:
用户完成文本字段编辑后,如何从 UITableViewCell 更新 numberArray?我知道我可以使用 textfield 委托方法,但是如何从 UITableViewCell 类访问 numberArray? 添加了操作方法:) 这意味着您的文本字段直接放在单元格中,如果它在某个容器内,您需要添加另一个.superview!检索单元格等。 我的 UITableViewController 类中的 onTextChanged 也是如此吗?感谢大家的帮助 是的。这整个 addTarget 东西告诉文本字段在当前类中触发 onTextChanged 方法(开头是 self)。 是的,它适用于从 UIControl 继承的任何东西。您甚至可以自己继承 UIControl 来创建自己的小部件并在它们上使用相同的语法。以上是关于Swift - uitableview 重用单元格时用户输入混淆?的主要内容,如果未能解决你的问题,请参考以下文章
如何不在 UICollectionView 中重用单元格 - Swift