viewview在iOS7中不再能够隐藏键盘

当视图控制器从导航堆栈弹出时,以下代码用于在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按钮,但现在,这是我能想到的唯一的办法。


iOS 7发生了一些变化,默认情况下,以模态形式呈现的视图控制器不能关闭键盘。 要解决这个问题,你需要覆盖你的视图控制器的disablesAutomaticKeyboardDismissal方法并返回NO


如果它是UITextView则将editable属性设置为NO 。 我试过这个,它一旦设置就隐藏键盘。 我没有尝试过使用UITextField但我猜你会得到相同的结果,将enabled属性设置为NO 。 如果这不起作用,请创建一个UITextField ,将userInteractionEnabled设置为NO作为透明UITextView的背景,并使用上述的editable属性。


问题是,在按下“BACK”按钮和viewWillDisappear激发时间之间的某个位置,当前文本字段的canResignFirstResponder设置为FALSE,这会阻止键盘隐藏。 我一直没能在代码中发现任何可能导致这种情况的内容,而且我强烈怀疑它可能是某种iOS 7错误,因为在iOS 6下相同的代码适用于我。

作为解决方法,我实施了以下解决方案。 我将UINavigationController分类并覆盖以下方法:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
    [self.topViewController.view endEditing:YES];
    return [super popViewControllerAnimated:animated];
}

当我点击后退按钮弹出当前视图控制器时,这导致键盘适当消失。 很好的松了一口气,我没有写一堆自定义的后退按钮。

链接地址: http://www.djcxy.com/p/90333.html

上一篇: No longer able to hide keyboard during viewWillDisappear in iOS7

下一篇: How to adjust the orientation of UIViewControllerWrapperView (in IOS7)?