所以这就是我的视图 - 顶部有一个文本字段作为搜索栏,然后在下面有一个表格视图。我想实现backgroundTap,这样当我点击任何地方键盘就会消失。
我尝试过将视图更改为UIControl并添加 -
- (IBAction)backgroundTap:(id)sender{
NSLog(@"BACKGROUND TAPPED");
[self.searchBar resignFirstResponder];
}
这不起作用 - 当我点击tableView(我已正确连接东西)时,backgroundTap方法不会运行。
我也尝试覆盖表视图的touchesBegan方法,但这也不起作用。
我如何实现我想要实现的目标?
编辑 -
我试图这样做 -
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTap:)];
tapRecognizer.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapRecognizer];
tapRecognizer.enabled = NO;
答案 0 :(得分:1)
解决方案1
当您的搜索栏成为第一响应者(开始接受键盘输入)时,创建一个新视图并将其放在表视图的顶部。使其透明,并为其添加点击手势识别器。在点击处理程序中,调用[self.searchBar resignFirstResponder]
,然后删除或隐藏此透明视图。
以下是创建此叠加层视图的方法:
// declare overlayView as a property or an ivar
_overlayView = [[UIView alloc] initWithFrame:self.tableView.frame];
_overlayView.alpha = 0; // make transparent
[self.view insertSubview:_overlayView aboveSubview:self.tableView];
解决方案2
您可以在UITableViewDelegate
方法tableView:didSelectRowAtIndexPath:
内取消第一响应者这样一次点按即可关闭键盘,并触发您为点击单元格而编程的任何操作。
答案 1 :(得分:0)
您想使用UITapGestureRecognizer。
在你的.h文件中:
@interface viewController: UIViewController <UITextFieldDelegate>
{
UITapGestureRecognizer *tapRecognizer;
}
在您的.m文件中:
- (void)viewDidLoad {
yourTextField.delegate = self;
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
tapRecognizer.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapRecognizer];
tapRecognizer.enabled = NO;
}
-(void)tapDetected {
[yourTextField resignFirstResponder];
}