如何将 didFinishEditing (textField) 与自定义单元格一起使用?

How to use didFinishEditing (textField) with custom cells?

我有自定义单元格,每个单元格中都有一个文本字段。当我更改其中的文本时,我想获取当前行,然后正确更新我的数组。到目前为止,我认为我什至无法完成 didFinishEditing 运行。我在那里放了一个简单的打印命令,当我更改 textFields 时,什么也没有打印出来。我不确定我应该把函数放在哪里,在单元格的 class 或主 class 中。在主 class 中它没有 运行,在单元格-class 中它不能给我索引 path.row。

这是我尝试过的方法:

func textFieldDidEndEditing(_ itemTitle: UITextField) {
    let pointInTable = itemTitle.convert(itemTitle.bounds.origin, to: self.tableView)

    let textFieldIndexPath = self.tableView.indexPathForRow(at: pointInTable)


    items.insert(itemTitle.text!, at: textFieldIndexPath)

    //tableView.reloadData()(This isn't really that important)
}

还有这个:

func textFieldDidEndEditing(_ itemTitle: UITextField) {

    items.insert(itemTitle.text!, at: indexPath.row)

    //tableView.reloadData()(This isn't really that important)

}

这是我的手机 class:

class ItemTableViewCell: UITableViewCell {

    @IBOutlet weak var itemTitle: UITextField!
    @IBOutlet weak var date: UILabel!


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        itemTitle.resignFirstResponder()
    }//(Not relevant)

}

在我的主要 class 我有以下内容:

class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {

以及我的视图布局的屏幕截图:

Screenshot link

我刚刚学会了自定义单元格,所以我开始学习了。我以前使用过 .default 和 .subtitle 单元格以及表格视图。

感谢您的任何回答!

你没有打印出任何东西,因为 UITextFieldDelegate 必须在你的 TableViewCell 中,然后你可以使用委托将你在 textField 中使用的单元格和文本传递给 viewController 并且在那里你可以访问你的 tableView 和你的 indexPath。

尝试这样的事情:

在这里创建委托并将 textField 委托放入 customCell

protocol ItemTableViewCellDelegate: NSObjectProtocol {
    func textFieldDidEndEditing(text: String, cell: ItemTableViewCell)
}


class ItemTableViewCell: UITableViewCell, UITextFieldDelegate {

    @IBOutlet weak var itemTitle: UITextField!
    @IBOutlet weak var date: UILabel!

    var delegate: ItemTableViewCellDelegate?

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        itemTitle.resignFirstResponder()
    }

    override func awakeFromNib() {
        itemTitle.delegate = self
    }

    func textFieldDidEndEditing(_ textField: UITextField) {
        if let text = textField.text {
            delegate?.textFieldDidEndEditing(text: text, cell: self)
        }
    }
}

你的 class 从你的自定义委托扩展而来。在委托函数中,您可以使用 indexPath(for: cell)

访问 indexPath
class PreviewToDoViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, ItemTableViewCellDelegate {

    func textFieldDidEndEditing(text: String, cell: ItemTableViewCell) {
        if let indexPath = tableView.indexPath(for: cell) {
            items.insert(text, at: textFieldIndexPath)
        }
    }
}