这就是我的视图,顶部有一个文本字段作为搜索栏,下面是一个表视图。我希望实现backgroundTap,这样当我点击任何地方时,键盘就会关闭。
我尝试通过将视图更改为UIControl并添加以下内容-
- (IBAction)backgroundTap:(id)sender{
NSLog(@"BACKGROUND TAPPED");
[self.searchBar resignFirstResponder];}
这不起作用--当我单击backgroundTap时,tableView方法没有运行(而且我已经正确地连接了事物)。
我还试图为表视图重写touchesBegan方法,但这也不起作用。
我怎样才能达到我想要达到的目标呢?
编辑-
我试过这样做-
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTap:)];
tapRecognizer.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapRecognizer];
tapRecognizer.enabled = NO;发布于 2013-12-19 00:33:05
解决方案1
当搜索栏成为第一个响应器(开始接受键盘输入)时,创建一个新视图并将其放在表视图的顶部。使其透明,并向其添加一个点击手势识别器。在tap处理程序中,调用[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:中的第一个响应程序,这样,一个点击就可以忽略键盘,也可以触发任何用于敲击单元的操作。
发布于 2013-12-19 00:35:05
您想要使用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];
}https://stackoverflow.com/questions/20671328
复制相似问题