iOS8 - 应用程序恢复后UIView inputView消失

时间:2014-09-30 00:15:58

标签: ios uiview keyboard ios8 inputview

我只针对iOS8有这个问题。一切都在iOS7上正常运行。

我的视图配置:

  • 我有一个UIView子类,它有一个自定义inputView(一个自定义键盘)
  • UIView子类有一个点击手势识别器,使其成为点击时的第一个响应者
  • UIView子类包含UITextView子视图

我的测试程序:

  1. 点击UIView子类。显示自定义键盘。
  2. 点击inputView上的一个特殊键,这使得UITextView成为第一个响应者。显示了alpha键盘。
  3. 在UITextView中键入文本后,再次点击UIView子类使其成为第一个响应者。 Alpha键盘消失,自定义键盘重新出现。
  4. 单击主页按钮退出到主屏幕。点按应用图标即可恢复该应用。
  5. 错误是当应用程序恢复时,inputView不再可见,而它恰好在步骤#4之前。点击UIView子类并不能恢复它。如果我在步骤#4之后检查它,则isFirstResponder对UIView子类返回true。

    知道如何让我的inputView不再消失吗?

2 个答案:

答案 0 :(得分:3)

这绝对是一个iOS错误。

inputView发布与常规键盘相同的键盘通知。在这种情况下,即使UIKeyboardWillHideNotification仍然是第一个响应者,也会在应用前台调用MainView inputView MainView

对此问题的更清晰的解决方法是在UIKeyboardWillHideNotification上注册MainView并重置firstResponder状态。

NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleKeyboardWillHideNotification:", name: UIKeyboardWillHideNotification, object: nil)

处理有缺陷的触发器。

func handleKeyboardWillHideNotification(notification:NSNotification) {
    if (self.isFirstResponder())
    {
        self.resignFirstResponder()
        self.becomeFirstResponder()
    }
}

答案 1 :(得分:0)

我发布了一个示例项目,用于演示错误并在此处修复错误:https://github.com/jeremywhuff/HWInputViewBugExample

在iOS8上运行它,你就会看到这个bug。在iOS7上运行它,你就赢了。

我已添加" hack fix"切换,将演示修复。绝对不理想,但它是我能想到的最好的。它会导致键盘在模拟器上闪烁,但在设备测试期间,这似乎不会发生。

可以在applicationDidBecomeActive中找到hack修复:

mainView.textView!.becomeFirstResponder()
NSTimer.scheduledTimerWithTimeInterval(0.05, target: mainView.textView!, selector: "resignFirstResponder", userInfo: nil, repeats: false)

这会导致文本视图变为然后快速重新响应第一个响应者,这似乎会使系统退出其不可见的inputView模式。