Есть ли способ отслеживать удаление символов в пустом поле uitextfield?

#ios #uikit

Вопрос:

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
 

не вызывается, если текстовое поле уже пусто и нажата кнопка назад

Я хочу уйти в отставку первым ответчиком и сделать предыдущее поле uitextfield в представлении первым ответчиком

есть ли способ достичь этого?

Ответ №1:

Чтобы достичь того, чего вы хотите, вам нужно подклассировать UITextField и создать пользовательский протокол, который будет уведомлять вас каждый раз, когда будет нажата кнопка удалить:

 protocol CustomTextFieldDelegate: AnyObject {
    func deleteBackwardPressed()
}

class CustomTextField: UITextField {

    weak var deleteDelegate: CustomTextFieldDelegate?

    override func deleteBackward() {
        super.deleteBackward()
        deleteDelegate?.deleteBackwardPressed()
    }
}
 

При создании вашего UIViewController он должен соответствовать CustomTextFieldDelegate . Также не забудьте назначить делегата своему пользовательскому текстовому полю. Упрощенный ViewController выглядел бы примерно так:

 class ViewController: UIViewController, CustomTextFieldDelegate {
    private var isTextFieldEmpty = false
    private let customTextField = CustomTextField()

    override func viewDidLoad() {
         super.viewDidLoad()
         customTextField.deleteDelegate = self
    }

    func deleteBackwardPressed() {
        if isTextFieldEmpty {
            customTextField.resignFirstResponder()
        } else {
            isTextFieldEmpty = customTextField.text?.count == 0
        }
    }
}