клавиатураWillShowNotification срабатывает при нажатии клавиши возврата (только при первом нажатии) - PullRequest
0 голосов
/ 18 апреля 2019

У меня очень странная проблема, которая возникает, когда я нажимаю клавишу возврата, и это происходит только тогда, когда я нажимаю ее в первый раз, каждый раз, когда она работает, как ожидалось.

У меня есть простой класс для управления клавиатурой, этопринимает массив текстовых полей, которые я не разрешил делегировать моему классу, а также регистрирую уведомления клавиатуры:

    public init(withTextFields textFields: [UITextField]) {
        super.init()

        guard textFields.count > 0 else { return }
        textFields.forEach{ $0.delegate = self }

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    }

Это мои методы, которые просто распечатывают текст для целей дебюта:

@objc func keyboardWillShow(notification: NSNotification) {
    print("aaaa")
}
@objc func keyboardWillHide(notification: NSNotification) {
    print("bbbb")
}

и мой UITextFieldDelegate:

    public func textFieldDidBeginEditing(_ textField: UITextField) {
        print("111")
    }

    public func textFieldDidEndEditing(_ textField: UITextField) {
        print("222")
    }

    public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        print("333")
        return true
    }

В моем контроллере представления у меня есть два текстовых поля, которые я передаю своему классу.Когда я нажимаю на первую, я вижу:

111
aaa

, что я и ожидал.проблема появляется, когда я нажимаю клавишу возврата на клавиатуре, затем записывается:

aaa
333

, но регистрируется только первый раз, когда я нажимаю ее, каждый раз, когда регистрируется: 333.

Когда я нажимаю клавишу возврата, клавиатура уже отображается на экране, так почему она снова вызывает UIResponder.keyboardWillShowNotification?Мой textFieldShouldReturn это пусто.

1 Ответ

0 голосов
/ 18 апреля 2019

Попробуйте позвонить resignFirstResponder() и / или view.endEditing(true) в textFieldShouldReturn.

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
    return true
}

Также попробуйте изменить UIResponder.keyboardWillHideNotification на UIResponder.keyboardDidHideNotification

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...