Swift 4, как узнать, нажата ли клавиша удаления, когда UITextField становится первым респондентом? - PullRequest
0 голосов
/ 31 мая 2018

Я искал ответ, все дело в использовании shouldChangeCharactersInRange функции UITextFieldDelegate.Это работает для большинства случаев.Но что, если UITextField уже пуст, метод shouldChangeCharactersInRange больше не вызывается при нажатии кнопки удаления.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 31 мая 2018

Это можно сделать, используя несколько методов (хотя не прямо!).Один из них - поместить на него невидимую кнопку или создать подкласс UITextField и добавить его в качестве пользовательского класса нужного текстового поля.Затем переопределяет метод deleteBackward.Этот метод будет перехватывать все события возврата.

Подкласс UITextField :

// MyTextField.swift

import UIKit

protocol MyTextFieldDelegate {
    func textFieldDidDelete()
}

class MyTextField: UITextField {

    var myDelegate: MyTextFieldDelegate?

    override func deleteBackward() {
        super.deleteBackward()
        myDelegate?.textFieldDidDelete()
    }

}

Реализация:

// ViewController.swift

import UIKit

class ViewController: UIViewController, MyTextFieldDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // initialize textField
        let input = MyTextField(frame: CGRect(x: 50, y: 50, width: 150, height: 40))

        // set viewController as "myDelegate"
        input.myDelegate = self

        // add textField to view
        view.addSubview(input)

        // focus the text field
        input.becomeFirstResponder()
    }

    func textFieldDidDelete() {
        print("delete")
    }

}
...