从表格视图单元格中收集文本字段文本(Swift)

Shi*_*ift 0 uitableview ios swift

我有一个表格视图,每个单元格中都有一个文本字段。我添加了这样的目标:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "customLevelCell") as! LevelTableViewCell

    cell.cellTextField.addTarget(self, action: #selector(ViewController.TextfieldEditAction), for: .editingDidEnd)

    return cell
}
Run Code Online (Sandbox Code Playgroud)

但发现我无法使用indexpath.row / sender.tag来获取特定的文本字段文本

@objc func TextfieldEditAction(sender: UIButton) {
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何在用户编辑文本字段之一后获取文本。

另外,我如何获取将用于收集它们添加到特定文本字段的文本的indexpath.row或sender.tag。

Ash*_*lls 5

处理这个问题最简单的方法可能是使用委托协议\xe2\x80\xa6

\n\n

在你的牢房里

\n\n
protocol LevelTableViewCellDelegate: class {\n    func levelTableViewCell(_ levelTableViewCell: LevelTableViewCell, didEndEditingWithText: String?)\n}\n\nclass LevelTableViewCell: UITableViewCell {\n    @IBOutlet private weak var cellTextField: UITextField!\n    var delegate: LevelTableViewCellDelegate?\n\n    override func awakeFromNib() {\n        cellTextField.addTarget(self, action: #selector(didEndEditing(_:)), for: .editingDidEnd)\n    }\n\n    @objc func didEndEditing(_ sender: UITextField) {\n        delegate?.levelTableViewCell(self, didEndEditingWithText: sender.text)\n    }\n}    \n
Run Code Online (Sandbox Code Playgroud)\n\n

在你的视图控制器中

\n\n
class TableViewController: UITableViewController {\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: "LevelTableViewCell") as! LevelTableViewCell\n        cell.delegate = self\n        return cell\n    }\n}\n\nextension TableViewController: LevelTableViewCellDelegate {\n\n    func levelTableViewCell(_ levelTableViewCell: LevelTableViewCell, didEndEditingWithText: String?) {\n\n        let indexPath = tableView.indexPath(for: levelTableViewCell)\n\n        // Now you have the cell, indexPath AND the string\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

另请注意,视图出口是 be private。如果遵循此规则,您会发现编写的代码更清晰

\n