【发布时间】:2013-12-17 14:12:54
【问题描述】:
以下代码在 iOS6 中用于在视图控制器从导航堆栈中弹出时隐藏键盘:
- (void)viewWillDisappear:(BOOL)animated {
[self.view endEditing:YES];
[super viewWillDisappear:animated];
}
但是,在 iOS7 中,[self.view endEditing:YES] 行似乎被忽略了。我在其他视图事件(viewDidDisappear、viewWillAppear 和 viewDidAppear)中尝试了该命令,它唯一起作用的是 viewDidAppear。似乎一旦启动“弹出”,我们就无法隐藏键盘,直到视图控制器被“推”回堆栈。
虽然将代码放入 viewDidAppear 确实可以隐藏键盘,但不好的是,当 viewController 被推回导航堆栈时,键盘会短暂显示...从 UI 角度来看这是不可接受的。
还有其他人成功解决了这个问题吗?我不希望自己编写 CANCEL 按钮,但现在,这是我能想到的唯一可行的方法。
【问题讨论】:
-
我完全按照您在
viewWillDisappear:中发布的内容进行操作,它对我有用。键盘消失了,UITextField调用了它的“结束编辑”委托。我刚刚在运行 iOS 7.0.4 的设备上验证了这一点。我所做的只是点击“返回”按钮来弹出视图控制器。 -
我在 7.0.3。我会尝试升级,看看会发生什么。
-
我真的怀疑这是 7.0.3/7.0.4 的问题。您是否实现了任何可能阻止文本字段/视图退出第一响应者的委托方法?
-
你说得对,这不是 7.0.3/7.0.4 的问题。我正在实现 textFieldShouldBeginEditing、textFieldDidBeginEditing 和 textFieldDidEndEditing 方法。我评论了这些,但仍然有同样的问题。不过你确实给了我一个想法。我在发出“pop”命令之前和之后检查了当前活动文本字段的 canResignFirstResponder 属性。在 pop 命令之前, canResignFirstResponder 为真。在弹出命令之后,它是错误的。我还没有在我的代码中发现任何可能导致这种情况的东西,但我会继续挖掘。
-
更正:canResignFirstResponder 在我发出 pop 命令之前和之后都是真的。然而,它在 viewWillDisappear 中变成了假的。
标签: ios objective-c ios7 keyboard xcode5