从自定义tableView单元格文本字段

时间:2018-04-10 11:15:01

标签: ios swift uitableview uitextfield

我有一个tableView,tableView中的自定义表格视图单元格,以及自定义表格视图单元格中的一些文本字段。

我根据表格视图单元格中的文本字段中的信息更新一个类。

我能够使用didDeselectRowAt函数成功获取单元格的文本字段中的数据来更新我的类,但是,这不是正确的实现,因为它要求用户单击并取消选择文本的单元格字段在,如果在编辑文本字段后更新了类,那将会更好。我已经搜索了类似的tableViews函数,但没有找到一个有效的函数。

在我的CustomTableViewCell类中,我还能够创建一个在编辑文本字段时执行的函数,但是这是在另一个类中,我不确定如何从这个函数填充我的player类。

以下是ViewController中的代码:

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!
        }
    }
}

我想做类似的事情,用自定义tableview单元格中的文本字段中的数据填充我的'player'类,但是我想在每个文本字段中编辑完成时发生这种情况,并且此代码在customTableViewCell类中不起作用。

非常感谢帮助!

1 个答案:

答案 0 :(得分:2)

如何使用传递给单元格的模型对象?在单元内,可以在用户交互时进行任何更新。对象的编辑触发器保留在单元格内,可立即生效。

这是一个人为的例子。

function roundDown(numberToRound) {
  //Check if the number would've rounded to 0
  if (numberToRound < 10) return numberToRound;
  //Return the number minus the difference to the nearest multiple of 10
  return numberToRound - (numberToRound % 10);
}

在细胞中:

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
  }
}

继续此之后,您可以选择使用ViewModel进一步抽象关系。