解除键盘FirstResponder问题
所以我正在制作一个应用程序,并且在解除UISearchBar和UITextFields的键盘时遇到了一些问题。 这是我的应用程序的结构:
NavigationController - > ViewC1 - (Modally) - > ViewC2 - (Modally) - > ViewC3
我在ViewC1中有一个搜索框,当键盘上的“搜索”按钮被按下时,键盘被解除,这工作正常。 但是,如果我在ViewC3中返回到ViewC1,那么当按下“搜索”按钮时键盘不再解除。 在搜索栏委托方法,我把它放在如下:
- (void) searchBarSearchButtonClicked:(UISearchBar *)search
{
if ([search isFirstResponder]) {
[search resignFirstResponder];
} else {
[search becomeFirstResponder];
[search resignFirstResponder];
}
}
这并没有解决问题,我不知道为什么键盘没有解雇。 作为参考,当返回到原始ViewC1时,ViewC3被解除如下:
UIViewController *parent = self.presentingViewController;
[parent.presentingViewController dismissViewControllerAnimated:YES completion:nil];
任何帮助表示赞赏,谢谢。
好吧,我找出了问题所在。 他们的第一响应者正在辞职,但由于焦点问题,键盘并未消失。 在模式视图上有一个默认行为,不能关闭键盘(这显然不是一个错误)。 所以从模态视图返回后,它仍然有这种行为(辞退第一响应者,但不是解雇键盘)。 我解决这个问题的方式是在模态视图.m文件中放置以下代码:
- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}
这为我解决了它。 然后通过使用:
[search resignFirstResponder];
要么
[self.view endEditing: YES];
键盘将罚款!
你需要用断点进行一些调试来找出条件语句没有被触发的原因。 您也可以使用UIView中的endEditing方法来简单地在单击搜索时退出响应者:
- (void) searchBarSearchButtonClicked:(UISearchBar *)search
[search endEditing:YES];
}
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html
尝试一下....
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[mySearchBar resignFirstResponder];
}
请声明IBOutlet UISearchBar * mySearchBar; 在你的.h文件中
在你的.xib文件中设置委托。
希望这有助于
链接地址: http://www.djcxy.com/p/44293.html