同时重用它再次创建在一些情况下,相同的新的存储器的单元分配数组的值。因此,属于该单元的所有小部件和组件显然将再次出生。为了保持小部件以前的状态,需要通过保持旧的状态数据来每次都将旧状态设置为新创建的小部件。
在你的情况下,它需要通过单元格中的协议方法来保存在TextField或TextView中输入的文本。以下是实现此目的的简要方法。每次
protocol CellDelegate {
func textFieldText(cell: UITableViewCell, text: String)
}
2.Trigger委托方法时文本得到更新:
Cell.swift
1.创建一个协议到文本传递到ViewController等。如果您拨打textFieldShouldEndEditing
中的方法,则会漏掉一个案例,例如,假设您在键盘中输入文本时没有轻按返回按钮(如果可用于保存按钮),并且如果点击该按钮,事件将不会发生,因此实际文本在持久模型中没有更新。所以,最好是调用该委托每次文本正在改变,shouldChangeCharactersInRange
方法在这种情况下选择,实施将是这样的:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let result = (textField.text as NSString?)?.replacingCharacters(in: range, with: string) ?? string
delegate.textFieldText(self, text: result)
}
ViewController.swift
1。在控制器中创建一个局部变量来保存每个文本字段或TextView的数据,如:
var textFieldText = ""
2.In cellForRowAt方法分配委托的单元格,更新文字像下面,所以每次被新建小区将更新先前输入的textField文本。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell......
cell.delegate = self
cell.textField.text = textFieldText
return cell
}
3.In每一次细胞委托方法执行更新的文字,在这里我们有一个说法小区通过了解indexPath确定当前单元格是有用的。
func textFieldText(cell: UITableViewCell, text: String) {
let indexPath = tableView.indexPathForCell(cell)
textFieldText = text
}
请在您的问题中包含有问题的代码。 –
由于'UITableViewCell'被重用,您的问题就出现了。您绝不应该将数据存储在表格视图单元格中,您应该将文本视图和文本字段中的所有数据保存到外部数据结构(如数组)中,并将其用作表视图的数据源。 但是,如果没有看到实际用于处理用户输入的代码,我无法给出明确的答案来显示要使用的实际代码。 –