编辑某些字段后键盘不显示

Posted

技术标签:

【中文标题】编辑某些字段后键盘不显示【英文标题】:Keyboard not showing after editing some fields 【发布时间】:2016-05-10 07:28:45 【问题描述】:

ios 键盘有一个非常奇怪的问题。我们有 2 个视图控制器,第一个有 2 个文本字段,第二个有一个 UISearchbar

如果我们不编辑任何文本字段,我们可以在两个视图控制器上的每个文本字段和搜索栏中显示键盘,但是当我们编辑其中一个时,我们失去了显示键盘的可能性,即使委托函数 shouldBeginEditing 是启动...你有没有类似的问题?这就像隐藏键盘的错误......

当我们关闭两个 ViewController 时,键盘又开始工作了。当我们检查第一响应者时,它是 nil 并且窗口如下:

2016-05-10 09:27:11.722 Nepcom[1352:1777156] isKeyWindow = 1 个窗口 级别 = 0.0 帧 = 0, 0, 375, 667 class= UIWindow 2016-05-10 09:27:11.723 Nepcom[1352:1777156] isKeyWindow = 0 窗口级别 = 1.0 框架 = 0, 0, 375, 667 class= UITextEffectsWindow 2016-05-10 09:27:11.723 Nepcom[1352:1777156] isKeyWindow = 0 窗口级别 = 2100.0 帧 = 0, 0, 375, 667 class= UITextEffectsWindow

我们不知道该怎么做。 提前致谢。

【问题讨论】:

只需添加键盘通知方法并检查是否被调用 它没有被调用...我们已经观察到通知 【参考方案1】:

首先,可能是因为键盘被更高级别的窗口所覆盖(有关详细信息,请参阅 windowLevel)。在 iOS 中,键盘是一个独立窗口的子视图。该窗口比应用程序的关键窗口具有更高的级别,因此它始终显示在前面。如果您在重叠位置创建另一个窗口并使其级别高于键盘窗口的级别,则键盘将被覆盖,从而对您的用户不可见。您可以通过检查应用程序窗口的相关属性来确认这一点

来自

https://developer.apple.com/library/ios/qa/qa1813/_index.html

【讨论】:

在这种情况下,第一响应者将为零?另一方面,我们没有创建任何其他窗口......如果我们不编辑第一个视图控制器的文本字段的内容,键盘将正确显示 你的第一响应者不应该是 nil 。查看您的文本字段的委托方法以及两个视图控制器视图的框架 您的文本输入视图拒绝成为第一响应者。当视图类的 - (BOOL)becomeFirstResponder 方法返回 NO 时,可能会发生这种情况。如果出于某些原因重写此方法,请确保在文本输入视图交互时返回 YES。 该字段是一个普通的 UISearchBar 我没有覆盖 becomeFirstResponer 方法......正如我评论的,shouldBeginEditing 正在返回 YES 你能在 ios 7 或 8 中测试一下吗

以上是关于编辑某些字段后键盘不显示的主要内容,如果未能解决你的问题,请参考以下文章

为啥在js取消设置只读标签后iOS不显示键盘输入?

启动自定义软键盘后文本字段不显示光标

单击“操作完成”键盘时看不到光标

为啥单击编辑文本后不显示qml虚拟键盘,而我在.pro和main.cpp中调用插件

虚拟键盘 jquery 在引导模式中显示不正确

点击 UITextField 时既不显示键盘也不显示光标