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

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

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

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

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

[myTextField becomeFirstResponder];

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

真的很混乱,

谁能帮我解决这个问题?

真的很感激!

【问题讨论】:

    标签: iphone ios notifications nsnotifications uiresponder


    【解决方案1】:

    您可能想发布您的代码。

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

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

    【讨论】:

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

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

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

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

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 2013-01-21
      • 2012-09-08
      • 2016-04-27
      • 2019-02-27
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多