我已经在我的应用程序中实现了 UISearchBar。我以编程方式创建它并在 View Controller (而不是 TableView )中使用它。它工作得很好,但我遇到的问题是使用手势识别器关闭键盘。我希望当用户点击键盘以外的屏幕时关闭键盘。
我知道有很多解决方案可以解决这个问题,但我有一个相当独特的问题,目前我无法弄清楚。我使用以下代码来实现这一点。
我将这一行放在我的 ViewController 的 viewDidLoad 方法中:
[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:search action:@selector(resignFirstResponder)]];
此方法正常工作,但我的 View Controller 以模态方式呈现 View ,因此它具有以下结构:
ViewController - 模态 -> view2 -模态 -> view3
当 View 2 和 3 被关闭并且我返回到 ViewController 时,手势识别器不再工作。在尝试我发现的另一种解决方案时,我遇到了同样的问题:
UIGestureRecognizer* cancelGesture;
- (void) backgroundTouched:(id)sender {
[self.view endEditing:YES];
}
#pragma mark - UISearchBarDelegate
-(void)searchBarTextDidBeginEditing:(UISearchBar *)search {
cancelGesture = [UITapGestureRecognizer new];
[cancelGesture addTarget:self action:@selector(backgroundTouched:)];
[self.view addGestureRecognizer:cancelGesture];
}
-(void)searchBarTextDidEndEditing:(UISearchBar *)search {
if (cancelGesture) {
[self.view removeGestureRecognizer:cancelGesture];
}
}
我将这些添加到我的主 ViewController 中,开始时它再次运行良好,但从模态视图返回后,手势不再有效。
如有任何帮助,我们将不胜感激!
编辑 1:
因此在测试时我发现按下键盘上的搜索按钮时会产生类似的效果。按下搜索后,我使用以下代码关闭键盘:
- (void) searchBarSearchButtonClicked:(UISearchBar *)search
{
[search resignFirstResponder];
}
这里的效果相同,当我第一次启动应用程序并进行一些搜索时工作正常,但是从我以模态呈现的 View Controller 返回到此屏幕后,按回车键不再关闭键盘。
编辑 2:
我什至尝试在 searchBarSearchButtonClicked 委托(delegate)方法中添加这段代码:
- (void) searchBarSearchButtonClicked:(UISearchBar *)search
{
if ([search isFirstResponder]) {
[search resignFirstResponder];
NSLog(@"text field was first responder");
} else {
[search becomeFirstResponder];
[search resignFirstResponder];
NSLog(@"text field was not first responder");
}
}
而且两次它都打印文本字段是第一响应者。从模态视图返回并再次单击搜索栏后,它仍然说它是第一响应者,但它并没有关闭,这很奇怪。对此的任何见解都会非常有帮助,谢谢。
最佳答案
好的,我知道问题出在哪里了。他们的第一响应者正在辞职,但键盘并没有因为焦点问题而消失。模态视图的默认行为是不关闭键盘(这显然不是错误)。因此,从模态视图返回后,它仍然具有这种行为(放弃第一响应者但不解除键盘)。我解决这个问题的方法是在两个模态视图 .m 文件中放置以下代码:
- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}
这为我解决了。然后通过使用:
[search resignFirstResponder];
或
[self.view endEditing: YES];
键盘将关闭!
关于ios - 从模态视图返回后使用手势识别器关闭 UISearchBar 的键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14853879/