在桌视图的背景轻拍

时间:2013-12-19 00:28:18

标签: ios objective-c cocoa-touch uitableview

所以这就是我的视图 - 顶部有一个文本字段作为搜索栏,然后在下面有一个表格视图。我想实现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;

2 个答案:

答案 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];
 }