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
。
如果它是一个UITextView
将editable
属性设置为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]; }