Ios 点击退格键后如何执行操作?

Ios 点击退格键后如何执行操作?,ios,swift,uikit,Ios,Swift,Uikit,我正在尝试构建一个简单的todo应用程序。任务屏幕是一个表视图控制器,它的单元格包含“检查”按钮和用于用户输入的文本字段。我正在尝试重新创建iPhone的notes应用程序所具有的一些逻辑。用户点击键盘上的返回键后,将创建一个新的单元格。如果textfield为空且用户点击退格键,则当前单元格将被删除。第一件事做得很好,但我不能把心思放在第二件事上。我找到了一些方法来注册点击退格,但在理解如何调用在表视图控制器中创建的删除单元格方法时遇到了问题 class CastomTextField: UI

我正在尝试构建一个简单的todo应用程序。任务屏幕是一个表视图控制器,它的单元格包含“检查”按钮和用于用户输入的文本字段。我正在尝试重新创建iPhone的notes应用程序所具有的一些逻辑。用户点击键盘上的返回键后,将创建一个新的单元格。如果textfield为空且用户点击退格键,则当前单元格将被删除。第一件事做得很好,但我不能把心思放在第二件事上。我找到了一些方法来注册点击退格,但在理解如何调用在表视图控制器中创建的删除单元格方法时遇到了问题

class CastomTextField: UITextField {

override public func deleteBackward() {
    if text == "" {
        print("Backspace tapped to delete row")
        // would like to insert delete row method here
    } else {
        print("Backspace tapped")
    }

    super.deleteBackward()
}

也许还有其他方法可以注册点击退格并执行操作

您可以从注册UIControlEvents.EditingChanged事件开始

textField.addTarget(self, action: "textFieldChanged:", forControlEvents: UIControlEvents.EditingChanged)
实现textFieldChanged方法,当到达单元格末尾时,调用delete cell方法。删除单元格时需要单元格indexath。我建议您找到一种获取selectedIndexPath的方法

    func textFieldChanged(textField: UITextField) {
        if textField.text?.isEmpty == true {
            textField.endEditing(true)
            deleteCurrentCell(indexPath: selectedIndexPath)
        }
    }

    private func deleteCurrentCell(indexPath: IndexPath) {
        tableView.beginUpdates()
        tableView.deleteRows(at: [indexPath], with: .right)
        tableView.endUpdates()
    }
在CustomTextField中

protocol CustomTextFieldDelegate {
    func deleteRow(at index: Int)
}

class CustomTextField: UITextField {
    weak var delegate: CustomTextFieldDelegate?
    override public func deleteBackward() {
        if text == "" {
            print("Backspace tapped to delete row")
            // would like to insert delete row method here
            delegate?.deleteRow(at: self.tag) //Set the row index
        } else {
            print("Backspace tapped")
        }
        super.deleteBackward()
    }
}
在自定义单元格中

class YourCustomCell: UITableViewCell {
    @IBOutlet weak var textField: CustomTextField!
}
在创建单元格的表视图控制器中,执行以下操作:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(
        withIdentifier: tableViewCellIdentifier, for: indexPath) as? YourCustomCell
    cell?.textField.tag = indexPath.row // Set the row index as tag so that we can retrieve later
    cell?.textField.delgate = self
    return cell!
}
将委托回调处理程序添加到表视图控制器类

extension YourTableViewController: CustomTextFieldDelegate {
    func deleteRow(at index: Int) {
       // Call your method to delete cell at index.
    }
}

您可以将UITextField子类化并将其添加到所需的类中。然后重写deleteBackward方法,该方法将捕获所有退格事件

override func deleteBackward() {
    super.deleteBackward()
    // Enter whatever you want to perform here
}
class CastomTextField: UITextField {

override public func deleteBackward() {
    if text == "" {
        print("Backspace tapped to delete row")
        myTable.deleteRows(at: [IndexPath(row: myTable.numberOfRows(inSection: 0)-1, section: 0)], with: .automatic)
        myTable.reloadData()
    } else {
        print("Backspace tapped")
    }

    super.deleteBackward()
}