Добавление inputAccessoryView к UIViewController приводит к неожиданным уведомлениям о показе / скрытии клавиатуры - PullRequest
0 голосов
/ 08 июля 2019

Мы можем установить inputAccessoryView для контроллера представления, как показано ниже.Обратите внимание, что этот аксессуар для ввода установлен в представлении controller , а не в текстовом поле - этот метод часто используется для пользовательского интерфейса с некоторым элементом, который перемещается вверх / вниз с помощью клавиатуры, но также говорит в нижней частиэкран при отклонении клавиатуры (например, приложение «Сообщения»).

    override var canBecomeFirstResponder: Bool {
        return true
    }

    override var inputAccessoryView: UIView? {
        return someView
    }

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

Например, с учетом простого контроллера представлений, приведенного ниже, уведомление keyboardWillShow запускается три раза при запуске.Конечно, клавиатура никогда не отображается.

Как это можно объяснить?И как я могу отфильтровать эти уведомления от тех, которые действительно представляют отображаемую / скрытую клавиатуру?

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

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

        view.backgroundColor = .white
    }

    override var canBecomeFirstResponder: Bool {
        return true
    }

    override var inputAccessoryView: UIView? {
        return UIView()
    }

    @objc private func keyboardWillShow(_ notification: Notification) {
        print("keyboard will show")
    }

    @objc private func keyboardWillHide(_ notification: Notification) {
        print("keyboard will hide")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...