keyboardWillShow 调用了两次

Posted

技术标签:

【中文标题】keyboardWillShow 调用了两次【英文标题】:keyboardWillShow called twice 【发布时间】:2011-11-10 16:04:11 【问题描述】:

我有一个带有键盘通知的视图,例如 keyboardWillShowkeyboardWillHide

我使用的通知的所有代码句柄均取自Apple的示例代码"KeyboardAccessory"

当我第一次进入这个视图时,一切正常。

但是当我从它的子视图返回到这个视图时,每次我点击一个按钮,上面写着:

[myTextField becomeFirstResponder];

keyboardWillShowkeyboardWillHide 方法每次都会被调用两次。

真的很混乱,

谁能帮我解决这个问题?

真的很感激!

【问题讨论】:

【参考方案1】:

您可能想发布您的代码。

如果您的方法被调用了两次,很可能是您多次注册键盘通知,而不是在您认为是时移除观察者。

在 viewWillAppear: 中添加你的观察者并在 viewWillDisappear: 中删除它,看看会发生什么。

【讨论】:

谢谢!我突然知道问题出在哪里了! 但是告诉我们您的问题的解决方案怎么样?听起来像是从视图控制器中移除观察者之外的其他东西 就我而言,我确实添加了两次观察者。谢谢~【参考方案2】:

ios 8 上显示自定义键盘(如 SwiftKey)时会调用两次。

在第一次调用时,它可能已准备好显示,因此CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;键盘高度为 0

第二次调用将具有正确的键盘高度,因此如果您需要调整内容插入,您可以在计算插入之前检查返回的键盘高度> 0。

此外,每当用户更改键盘时都会调用它。

【讨论】:

我得到的通知完全相同(对象地址相等)并且高度也相等...... :-(另外,我只在 viewDidLoad 中添加了一次观察者【参考方案3】:

对我来说,更改inputAccessoryView 会触发另一个keyboardWillShow 调用,因为输入附件视图的高度会影响整个键盘高度。

【讨论】:

以上是关于keyboardWillShow 调用了两次的主要内容,如果未能解决你的问题,请参考以下文章

keyboardWillShow fire 两次

“key”是不是在 Java HashMap 中存储了两次?

didUpdateToLocation 调用了两次,好的。为啥 oldLocation 两次都为零?

ViewDidLoad 调用了两次

didRegisterUserNotificationSettings 被调用了两次?

ListSelectionListener 调用了两次