在iOS7中的viewWillDisappear期间,无法再隐藏键盘

Ala*_*ele 15 keyboard objective-c ios ios7 xcode5

以下代码用于在iOS6中工作,以便在从导航堆栈弹出视图控制器时隐藏键盘:

- (void)viewWillDisappear:(BOOL)animated {
    [self.view endEditing:YES];
    [super viewWillDisappear:animated];
}
Run Code Online (Sandbox Code Playgroud)

但是,在iOS7中,[self.view endEditing:YES]行似乎被忽略了.我在其他视图事件(viewDidDisappear,viewWillAppear和viewDidAppear)中尝试了该命令,并且它唯一使用的是viewDidAppear.似乎一旦启动"弹出",我们将失去隐藏键盘的能力,直到视图控制器被"推回"到堆栈上.

虽然将代码放在viewDidAppear中确实可以隐藏键盘,但不好的是当viewController被推回到导航堆栈时键盘会短暂显示......从UI的角度来看,这是非常不可接受的.

有没有其他人成功解决这个问题?我不想编写自己的CANCEL按钮,但是现在,这是我能想到的唯一可行的方法.

Ala*_*ele 0

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

作为解决方法,我实施了以下解决方案。我对 UINavigationController 进行了子类化并重写了以下方法:

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

当我点击“后退”按钮弹出当前视图控制器时,这导致键盘适当消失。我不必编写一堆自定义后退按钮,这让我松了一口气。