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。
处理这个问题最简单的方法可能是使用委托协议\xe2\x80\xa6
\n\n在你的牢房里
\n\nprotocol 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\nclass 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
。如果遵循此规则,您会发现编写的代码更清晰
归档时间: |
|
查看次数: |
1684 次 |
最近记录: |