Как реализовать действия после нажатия на клавишу возврата? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь создать простое приложение todo. Экран задач представляет собой контроллер табличного представления, и в его ячейках есть кнопка «проверить» и текстовое поле для ввода данных пользователем. Я пытаюсь воссоздать некоторые логи c приложение для заметок iPhone. После нажатия пользователем клавиши возврата на клавиатуре создается новая ячейка. Если текстовое поле пусто, и пользователь нажимает клавишу возврата, текущая ячейка удаляется. Первая вещь работает просто отлично, но я не могу сосредоточиться на второй. Я нашел способ зарегистрировать нажатие на backspace, но у меня возникли проблемы с пониманием того, как вызвать метод удаления ячейки, который я сделал в контроллере табличного представления.

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

Может быть, есть другие способы зарегистрировать нажатие на клавишу возврата и реализовать действия?

Ответы [ 4 ]

1 голос
/ 07 апреля 2020

В 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.
    }
}
0 голосов
/ 07 апреля 2020
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()
}
0 голосов
/ 07 апреля 2020

Вы можете создать подкласс UITextField и добавить его в нужный класс. Затем переопределите метод deleteBackward (), который будет перехватывать все события возврата.

override func deleteBackward() {
    super.deleteBackward()
    // Enter whatever you want to perform here
}
0 голосов
/ 07 апреля 2020

Вы можете начать с регистрации события UIControlEvents.EditingChanged

textField.addTarget(self, action: "textFieldChanged:", forControlEvents: UIControlEvents.EditingChanged)

Реализация метода textFieldChanged, когда вы достигнете в конце ячейки, вызовите метод удаления ячейки. Вам понадобится ячейка indexPath для удаления ячейки. Я рекомендую вам найти способ получить 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()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...