Как вернуть эффект «clearsOnBeginEditing (true)» (удалить старое значение при редактировании beging) на textField, если он оставлен пустым? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть функция, запускающая двух наблюдателей - keyboardWillShowNotification и KeyboardWillHideNotification, и я в основном делаю сброс текстового поля во время редактирования, эмулируя эффект clearsOnBeginEditing. Однако, если пользователь оставил поле пустым, я хочу, чтобы оно вернуло исходное значение перед редактированием. Вот мой экспериментальный код:

@objc func keyboardWillChange(notification: Notification) {

    if notification.name == UIResponder.keyboardWillShowNotification || notification.name == UIResponder.keyboardWillHideNotification {

            if textField.isEditing {
                let originalValue: String!
                originalValue = textField.text!
                textField.text = ""
                print("content while editing is \(originalValue)")

                if notification.name == UIResponder.keyboardWillHideNotification {
                    print("this is content on end editing \(originalValue)")

                        if textField!.isEmpty == true {
                            print("this is nill")
                            textField.text! = originalValue
                        } else {
                             textField.text = textField.text
                             print("found a value")

                        }
                }
            }
    }

Как правильно это сделать?

1 Ответ

0 голосов
/ 12 сентября 2018

Для этого вам не нужно реализовывать делегаты клавиатуры.Это легко сделать, используя методы UITextFieldDelegate textFieldDidBeginEditing и textFieldDidEndEditing.

var orignalValue: String = ""

func textFieldDidBeginEditing(_ textField: UITextField) {
    originalValue = textField.text
    textField.text = ""
}

func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) {
    if textField.text?.isEmpty {
        textField.text = orignalValue
    }
}

Примечание. Контроллер представления должен соответствовать UITextFieldDelegate, а в ваших текстовых полях должны быть установлены делегаты:self.

...