以下代码在iOS6中用于在视图控制器弹出导航堆栈时隐藏键盘:
- (void)viewWillDisappear:(BOOL)animated {
[self.view endEditing:YES];
[super viewWillDisappear:animated];
}
但是,在iOS7中,[self.view endEditing:YES]行似乎被忽略了。我在其他视图事件(viewDidDisappear,viewWillAppear和viewDidAppear)中尝试了该命令,并且它唯一使用的是viewDidAppear。似乎一旦启动了“pop”,我们将失去隐藏键盘的能力,直到视图控制器被“推回”到堆栈上。
虽然将代码放在viewDidAppear中确实可以隐藏键盘,但不好的是当viewController被推回到导航堆栈时,键盘会短暂显示......从UI的角度来看,这是非常不可接受的。
有没有其他人成功解决这个问题?我宁愿不必编写自己的CANCEL按钮,但是现在,这是我能想到的唯一可以工作的东西。
答案 0 :(得分:2)
如果UITextView
将editable
属性设置为NO
。我试过这个,它一旦设置就隐藏了键盘。我没有尝试使用UITextField
,但我猜测您将enabled
属性设置为NO
会得到相同的结果。如果这不起作用,请创建UITextField
,userInteractionEnabled
设置为NO
作为透明UITextView
的背景,并使用editable
属性作为如上所述。
答案 1 :(得分:1)
iOS 7中有一个更改,默认情况下,以模式形式显示的视图控制器无法关闭键盘。要解决此问题,您需要覆盖视图控制器的disablesAutomaticKeyboardDismissal
方法并返回NO
。
答案 2 :(得分:0)
问题在于,在我按下“BACK”按钮和viewWillDisappear触发的时间之间,当前文本字段的canResignFirstResponder被设置为FALSE,这会阻止键盘隐藏。我无法在我的代码中发现可能导致此问题的任何内容,我强烈怀疑它可能是某种iOS 7错误,因为相同的代码在iOS 6下适用于我。
作为一种解决方法,我实施了以下解决方案。我将UINavigationController子类化并覆盖以下方法:
- (UIViewController *)popViewControllerAnimated:(BOOL)animated {
[self.topViewController.view endEditing:YES];
return [super popViewControllerAnimated:animated];
}
当我点击“后退”按钮弹出当前视图控制器时,这会导致键盘正常消失。很高兴,我没有必要写一堆自定义后退按钮。
答案 3 :(得分:0)
在文本字段失去焦点时隐藏键盘
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if ([textField isFirstResponder])
[textField resignFirstResponder];
return YES;
}
答案 4 :(得分:0)
我尝试了一种解决方法。这可能不是你们所期待的。
如果您使用的是故事板,则可以使用“ prepareForSeuge ”方法重新设置键盘。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[self.view endEditing:YES];
}
它对我来说很好。
答案 5 :(得分:0)
下面给出的方法肯定会隐藏iOS7中的状态栏。
- (BOOL)prefersStatusBarHidden
{
return YES;
}
将其添加到.plist文件中(转到应用程序设置中的“信息”)
View controller-based status bar appearance --- NO
然后你可以调用这一行来隐藏状态栏:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
如果您的应用程序开发为仅支持iPhone,则在iPad中运行应用程序时状态栏将不会隐藏。
答案 6 :(得分:-1)
将您的UItextfield或UItextview用于全局声明。
UITextfield textfield =您的文本字段对象;
-(void)viewWillDisappear:(BOOL)animated
{
[self.view endEditing:YES];
[textfield resignFirstResponder];
[super viewWillDisappear:animated];
}