Ios 在UITableView的空白区域检测点击
我有一个UIViewController,它下面有一个UITextField和一个UITableView。我正在使用UITableView上的UITextField作为搜索框 当我点击UITextField内部时,虚拟键盘会出现,当我点击UITableView的任何区域时,我希望虚拟键盘消失。当用户点击UITableView和UITextField以外的任何区域时,键盘也应该消失。如果键盘不可见,并且用户点击任何UITableViewCell,则我需要打开另一个UIViewController 这就是它的样子 当前实施: 我正在使用UITapGestureRecognitor检测抽头位置。此外,我正在使用shouldReceiveTouch查找触摸是否在UITableView上。如果是,则返回否,这意味着我忽略了对UITableView的触摸。如果否,则返回“是”,在UITapGestureRecognitor处理程序中,我通过调用来关闭键盘Ios 在UITableView的空白区域检测点击,ios,objective-c,iphone,uitableview,Ios,Objective C,Iphone,Uitableview,我有一个UIViewController,它下面有一个UITextField和一个UITableView。我正在使用UITableView上的UITextField作为搜索框 当我点击UITextField内部时,虚拟键盘会出现,当我点击UITableView的任何区域时,我希望虚拟键盘消失。当用户点击UITableView和UITextField以外的任何区域时,键盘也应该消失。如果键盘不可见,并且用户点击任何UITableViewCell,则我需要打开另一个UIViewController
[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
?它将如何帮助我解决当前的问题?它将为您的表提供一个预期的搜索界面,并将防止您面临的问题甚至不存在。