viewview在iOS7中不能隐藏键盘

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

- (void)viewWillDisappear:(BOOL)animated { [self.view endEditing:YES]; [super viewWillDisappear:animated]; } 

但是,在iOS7中,[self.view endEditing:YES]行似乎被忽略。 我尝试了其他视图事件(viewDidDisappear,viewWillAppear和viewDidAppear)中的命令,它唯一的工作是viewDidAppear。 看起来,一旦“popup”被启动,我们就失去了隐藏键盘的能力,直到视图控制器被“推回”堆栈。

在viewDidAppear中放置代码确实可以隐藏键盘,坏处是当viewController被推回到导航堆栈时,键盘会短暂地显示出来……从UIangular度来看,这是非常不可接受的。

有没有人有成功解决这个问题? 我宁愿不必写我自己的CANCELbutton,但现在,这是我能想到的唯一的办法。

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

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

问题是,在我按下“返回”button和viewWillDisappear触发时间之间的某个地方,当前文本字段的canResignFirstResponder设置为FALSE,从而阻止键盘隐藏。 我一直没能在代码中发现任何可能导致这种情况的东西,而且我强烈怀疑这可能是某种iOS 7的错误,因为在iOS 6下相同的代码适合我。

作为解决方法,我实施了以下解决scheme。 我subclassed UINavigationController和overrode以下方法:

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

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

当文本字段丢失焦点时隐藏键盘

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { if ([textField isFirstResponder]) [textField resignFirstResponder]; return YES; } 

我尝试了一个解决方法。 这可能不是你们所期待的。

如果您正在使用故事板,则可以使用“ prepareForSeuge ”方法辞去键盘。

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { [self.view endEditing:YES]; } 

它为我工作得很好。

下面给出的方法肯定会隐藏iOS7中的状态栏。

 - (BOOL)prefersStatusBarHidden { return YES; } 

将其添加到.plist文件中(转到应用程序设置中的“信息”)

 View controller-based status bar appearance --- NO 

那么你可以调用这一行来隐藏状态栏:

 [[UIApplication sharedApplication] setStatusBarHidden:YES]; 

如果您的应用程序仅用于支持iPhone,则在iPad中运行应用程序时,状态栏不会隐藏。

把你的UItextfield或UItextview全局声明。

UITextfield textfield =您的文本字段对象;

 -(void)viewWillDisappear:(BOOL)animated { [self.view endEditing:YES]; [textfield resignFirstResponder]; [super viewWillDisappear:animated]; }