首页 > 解决方案 > iOS UIKeyboardWillShow 意外触发

问题描述

我有 aUITextView和 a UITableView,我需要TableView在键盘打开和关闭时调整底部位置和滚动,所以我为键盘设置了通知。不仅在键盘打开(预期)时执行KeyboardWillShowKeyboardDidShow触发,它们还会在加载视图以及键盘关闭时触发(不预期)。这些是应用程序中设置的唯一通知。

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow(_:)), name: .UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector:  #selector(keyboardWillHide(_:)), name: .UIKeyboardWillHide, object: nil)
NotificationCenter.default.addObserver(self, selector:  #selector(keyboardDidHide(_:)), name: .UIKeyboardDidHide, object: nil)


@objc func keyboardWillShow(_ notification: Notification) {
    print ("KEYBOARD WILL SHOW")
}
@objc func keyboardDidShow(_ notification: Notification) {
    print ("KEYBOARD DID SHOW")
}
@objc func keyboardWillHide(_ notification: Notification) {
    print ("KEYBOARD WILL HIDE")
}
@objc func keyboardDidHide(_ notification: Notification) {
    print ("KEYBOARD DID HIDE")
}

单击TextView打开键盘,然后拖动TableView关闭它。(TableView已通过“交互式关闭”以及“拖动时关闭”进行了测试)。

这是加载视图、打开键盘和关闭键盘后的控制台输出:

查看首次加载(键盘未打开)....

KEYBOARD WILL SHOW (不期望)

KEYBOARD DID SHOW (不期望)

键盘打开...

KEYBOARD WILL SHOW (预期的)

KEYBOARD DID SHOW (预期的)

键盘关闭...

KEYBOARD WILL HIDE (预期的)

KEYBOARD WILL SHOW (不期望)

KEYBOARD DID HIDE (预期的)

KEYBOARD DID SHOW (不期望)

此外,当TableView设置为“以交互方式关闭”并且我TableView缓慢向下拖动时,“WillShow/DidShow”事件会在键盘关闭大约 2/3 时开始疯狂触发。

什么可能导致这些键盘打开事件触发?

Xcode 11.3/iOS 9.0

标签: iosobjective-cswiftxcode

解决方案


它可能是另一个不可见的视图,导致键盘显示或隐藏。观察这些事件的每个人都会收到通知,包括当前未激活的其他视图。


推荐阅读