keyboardWillShow 调用了两次
Posted
技术标签:
【中文标题】keyboardWillShow 调用了两次【英文标题】:keyboardWillShow called twice 【发布时间】:2011-11-10 16:04:11 【问题描述】:我有一个带有键盘通知的视图,例如 keyboardWillShow
和 keyboardWillHide
我使用的通知的所有代码句柄均取自Apple的示例代码"KeyboardAccessory"
当我第一次进入这个视图时,一切正常。
但是当我从它的子视图返回到这个视图时,每次我点击一个按钮,上面写着:
[myTextField becomeFirstResponder];
keyboardWillShow
和 keyboardWillHide
方法每次都会被调用两次。
真的很混乱,
谁能帮我解决这个问题?
真的很感激!
【问题讨论】:
【参考方案1】:您可能想发布您的代码。
如果您的方法被调用了两次,很可能是您多次注册键盘通知,而不是在您认为是时移除观察者。
在 viewWillAppear: 中添加你的观察者并在 viewWillDisappear: 中删除它,看看会发生什么。
【讨论】:
谢谢!我突然知道问题出在哪里了! 但是告诉我们您的问题的解决方案怎么样?听起来像是从视图控制器中移除观察者之外的其他东西 就我而言,我确实添加了两次观察者。谢谢~【参考方案2】:在 ios 8 上显示自定义键盘(如 SwiftKey)时会调用两次。
在第一次调用时,它可能已准备好显示,因此CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
的键盘高度为 0。
第二次调用将具有正确的键盘高度,因此如果您需要调整内容插入,您可以在计算插入之前检查返回的键盘高度> 0。
此外,每当用户更改键盘时都会调用它。
【讨论】:
我得到的通知完全相同(对象地址相等)并且高度也相等...... :-(另外,我只在 viewDidLoad 中添加了一次观察者【参考方案3】:对我来说,更改inputAccessoryView
会触发另一个keyboardWillShow
调用,因为输入附件视图的高度会影响整个键盘高度。
【讨论】:
以上是关于keyboardWillShow 调用了两次的主要内容,如果未能解决你的问题,请参考以下文章
“key”是不是在 Java HashMap 中存储了两次?
didUpdateToLocation 调用了两次,好的。为啥 oldLocation 两次都为零?