Ios 在UITableView的空白区域检测点击

Ios 在UITableView的空白区域检测点击,ios,objective-c,iphone,uitableview,Ios,Objective C,Iphone,Uitableview,我有一个UIViewController,它下面有一个UITextField和一个UITableView。我正在使用UITableView上的UITextField作为搜索框 当我点击UITextField内部时,虚拟键盘会出现,当我点击UITableView的任何区域时,我希望虚拟键盘消失。当用户点击UITableView和UITextField以外的任何区域时,键盘也应该消失。如果键盘不可见,并且用户点击任何UITableViewCell,则我需要打开另一个UIViewController

我有一个UIViewController,它下面有一个UITextField和一个UITableView。我正在使用UITableView上的UITextField作为搜索框

当我点击UITextField内部时,虚拟键盘会出现,当我点击UITableView的任何区域时,我希望虚拟键盘消失。当用户点击UITableView和UITextField以外的任何区域时,键盘也应该消失。如果键盘不可见,并且用户点击任何UITableViewCell,则我需要打开另一个UIViewController

这就是它的样子

当前实施: 我正在使用UITapGestureRecognitor检测抽头位置。此外,我正在使用shouldReceiveTouch查找触摸是否在UITableView上。如果是,则返回否,这意味着我忽略了对UITableView的触摸。如果否,则返回“是”,在UITapGestureRecognitor处理程序中,我通过调用来关闭键盘

    [self.searchTextField resignFirstResponder];
现在我面临的问题是:如果我的UITableView没有足够的数据,并且它只显示1或2个单元格,那么在这种情况下,如果我点击UITableView的空白区域,我希望键盘被关闭,但不会,因为点击是在UITableView上,并且应该接收触摸将返回否并忽略触摸

注意我首先实现shouldReceiveTouch的原因是我希望在用户点击任何单元格时自动调用didSelectRowAtIndexPath函数。只有当我忽略UITableView上的点击手势时,这才可能实现

我又尝试了一种方法,在这种方法中,我没有实现shouldReceiveTouch,每次点击时,我都会调用UITapGestureRecognizer处理程序,并检测触摸是否在UITableView中。在这种情况下,我没有得到被点击的正确的行索引。我就是这样实现的:

-(void)dismissKeyboard:(UITapGestureRecognizer *)tap
{
     if([self.searchTextField isFirstResponder])
     {
         [self.searchTextField resignFirstResponder];
         return;
     }

     CGPoint location = [tap locationInView:self.view];

     if(touchedOutsideUITableView)
     return;

     NSIndexPath *path = [self.lotsTableView indexPathForRowAtPoint:location];

     if(path)
     {
     // user taps on existing row
     [self tableView:self.lotsTableView didSelectRowAtIndexPath:path];
     }
     else
     {
     // handle tap on empty area of UITableView
     }
}

有人能告诉我如何在我当前的实现中检测UITableView的点击空白区域吗?

我认为只需实现
textfield应该开始编辑
,并在触发时向您的tableView添加一个
UITapgestureRecognitor
。然后,当用户停止编辑文本字段时,立即删除UIAPTgestureRecognitizer。

保持UIAPTgestureRecognitizer,但将CancelsTouchesView设置为NO,怎么样?默认为是


这样,当您点击任何单元格时,您的didSelectRowAtIndexPath方法仍会被调用。

为什么不使用
UISearchController
?它将如何帮助我解决当前的问题?它将为您的表提供一个预期的搜索界面,并将防止您面临的问题甚至不存在。