【问题标题】: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

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

【问题讨论】:

  • 只需添加键盘通知方法并检查是否被调用
  • 它没有被调用...我们已经观察到通知

标签: ios objective-c keyboard


【解决方案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 中测试一下吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多