我有一个表视图,表视图内有一个自定义表视图单元格,自定义表视图单元格内有几个文本字段。
我根据表视图单元格中的文本字段中的信息更新类。
我能够使用 didDeselectRowAt 函数成功获取单元格文本字段中的数据以更新我的类,但是,这不是正确的实现,因为它需要用户单击并取消选择文本字段所在的单元格,如果在编辑文本字段后更新类会更好。我已经搜索了类似的tableViews功能,但没有找到有效的功能。
在我的 CustomTableViewCell 类中,我还能够创建一个在编辑文本字段结束时执行的函数,但是这是在另一个类中,我不确定如何从此函数填充我的玩家类。
以下是视图控制器中的代码:
public func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
for item in players {
if item.uniqueRowID == indexPath.row {
item.name = cell.textboxName.text!
}
}
}
我想做类似的事情,用自定义表视图单元格内文本字段中的数据填充我的"玩家"类,但我希望在每个文本字段中完成编辑时发生这种情况,并且此代码在自定义 TableViewCell 类中不起作用。
帮助将不胜感激!
使用传递给单元格的模型对象怎么样?在单元格中,可以在用户交互时进行任何更新。对象的编辑触发器保留在单元格内,可以立即生效。
这是一个人为的例子。
final class UIViewController: UITableViewDataSource {
var players: [Player] = [] // Players set by something in the view controller.
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
guard let cell = tableView.cellForRow(at: indexPath) as? CustomTableViewCell else { fatalError() }
cell.player = players[indexPath.row]
return cell
}
}
在单元格本身中:
final CustomTableViewCell: UITableViewCell, UITextFieldDelegate {
var player: Player!
weak var textField: UITextField!
func textFieldDidEndEditing(_ textField: UITextField) {
player.name = textField.text
}
}
在此之后,您可以选择使用 ViewModel 进一步抽象关系。