Мы можем установить 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")
}
}