我只针对iOS8有这个问题。一切都在iOS7上正常运行。
我的视图配置:
我的测试程序:
错误是当应用程序恢复时,inputView不再可见,而它恰好在步骤#4之前。点击UIView子类并不能恢复它。如果我在步骤#4之后检查它,则isFirstResponder对UIView子类返回true。
知道如何让我的inputView不再消失吗?
答案 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模式。