【问题标题】:Swift - User input mixed up when uitableview reuses cells?Swift - uitableview 重用单元格时用户输入混淆?
【发布时间】:2015-09-01 19:56:42
【问题描述】:

我目前正在开发一个应用程序,该应用程序具有 UITableView 和包含 UITextField 的自定义单元格。我遇到的问题是,在用户向文本字段输入数字后,滚动时,tableView 会重用该单元格,并且用户之前的输入会在新单元格中初始化。例如,如果我将数字 7 放在顶部单元格的文本字段中,当我滚动时,最新的单元格中已经有一个 7。我想知道如何解决这个问题?感谢您的帮助。

编辑:由于我的问题不清楚,我基本上需要一种方法让我的 UITableViewCell 与我的 UITableViewController 中的模型“对话”,这样当用户完成编辑单元格中的 UITextField 时,我可以将输入保存到我的视图控制器中的数组。再次感谢

【问题讨论】:

  • 保存该索引路径的条目并在 cellForRow 中设置文本字段

标签: ios swift uitableview


【解决方案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 来创建自己的小部件并在它们上使用相同的语法。
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 2021-03-21
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多