iOS UIKeyboardWillShow意外触发

时间:2020-01-21 17:36:46

标签: ios objective-c swift xcode

我有一个UITextView和一个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缓慢向下拖动时,当键盘大约为2/3时,“ WillShow / DidShow”事件会像疯狂地启动封闭的方式。

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

Xcode 11.3 / iOS 9.0

1 个答案:

答案 0 :(得分:0)

这可能是另一个看不见的视图,导致键盘被显示或隐藏。 所有人观察这些事件将获得通知,包括当前未处于活动状态的其他视图。