为啥从导航堆栈中弹出视图时键盘不显示?

Posted

技术标签:

【中文标题】为啥从导航堆栈中弹出视图时键盘不显示?【英文标题】:Why does the keyboard not show when a view is popped from the navigation stack?为什么从导航堆栈中弹出视图时键盘不显示? 【发布时间】:2011-11-15 18:22:46 【问题描述】:

我在一个视图中有几个 UITextField 对象。当我按下它们时,我会得到一个键盘和UIKeyboardWillShowNotification 事件。当我将一个新的视图控制器推到堆栈上,而其中一个文本字段是第一响应者时,键盘会动画(如我所料)。然而,当我按下后退按钮时,他们的文本字段成为第一响应者,但键盘没有恢复。当我再次单击同一视图中的不同文本字段时,键盘无法启动。如果当我重新进入视图时键盘没有启动,那会很好,但我不确定当我单击另一个文本字段时是什么导致它无法启动。为什么会发生这种情况,我该如何解决?

旁注,当我在离开屏幕前辞去第一响应者的职务时,一切正常。

【问题讨论】:

那么,在离开第一个屏幕之前让第一响应者辞职...... 虽然我可以(并且将)这样做来解决特定情况,但我希望得到解释和一般解决方案。 【参考方案1】:

我已经弄清楚了,据我所知,这是 Apple 代码的一个错误。我在名为firstResponder 的 UITextField 的父视图之一上有一个属性。似乎没有任何理由我不应该使用这个名称,但显然 Apple 已经在他们的代码中的某个地方使用了它,并且当我使用这个名称创建一个属性时,它会导致框架中的第一响应者代码严重错误。解决方案是将我的财产命名为其他名称。

辞去第一响应者的唯一原因是让事情正常进行,因为我还将 firstResponder 属性设置为 nil。

【讨论】:

【参考方案2】:

我想键盘被其他机制隐藏了,而不是第一响应者辞职,所以系统认为它已经在显示键盘,因此不需要再次显示它。

如果您可以获得一个具有可重现实现的简单示例应用程序,这听起来像是 ios 中的一个错误,您应该向 Apple 报告。

【讨论】:

以上是关于为啥从导航堆栈中弹出视图时键盘不显示?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能从字符堆栈中弹出元素?

从导航堆栈中弹出视图控制器时从右侧滑入

如何在不使用导航栏的情况下从导航堆栈中弹出控制器

UIToolBar 动画与视图转换不正确

有没有办法找出视图控制器是不是从导航堆栈中弹出?

从堆栈中弹出导航控制器/创建双视图