在UITableView中搜索后错误的Tap坐标

时间:2013-12-03 13:52:04

标签: ios iphone objective-c uitableview

我很确定我的问题的答案很简单,但经过几个小时的反对,我转向你......

我有一个带UISearchBar的UITableView。搜索似乎工作得很好,但是当我搜索并点击一个单元格时,我得到了可见单元格的IndexPath,而不是单元格相对于整个UITableView的坐标。

现在,我很确定我的问题在于/我正在使用手势而不是didSelectRowAtIndex,因为我需要处理单击和双击。我已将手势识别器附加到视图中。

单击/双击识别器获取所选的表格单元格:

CGPoint location = [gesture locationInView:self.tableView];
NSIndexPath *cellIndexPath = [self.tableView indexPathForRowAtPoint:location];

我的UITableView的大小适合在需要滚动之前显示大约8行。如果没有在UISearchBar中输入文本,这可以正常工作(两种手势)。如果我滚动到UITableView的第15行并点击,则cellIndexPath会返回第15行。

但是,如果我输入一个需要用户滚动的搜索词,则点击第一个屏幕后面的任何单元格会返回相对于其当前可见位置的行的cellIndexPath(这意味着如果我滚动到第10行并且将它定位到UITableView的最后一行,点击给出一个8的行索引。

所以,基本上,我试图弄清楚为什么在不搜索UITableView与输入搜索词时行为不同。

感谢您的帮助, 罗布

1 个答案:

答案 0 :(得分:2)

哇,有时写下问题会引导你找到解决方案......这就是我所意识到的。我正在使用带有UISearchDisplayController的UISearchBar。我的基本理解是在搜索时,UISearchDisplayController用自己的tableView替换tableView来显示结果。在这种情况下,上面的代码在搜索时尝试获取tapped单元格时查看了错误的UITableView。所以,我修改了代码如下,一切似乎都很好。

CGPoint location;
NSIndexPath *cellIndexPath;
if (self.isSearching)
{
    location = [gesture locationInView:self.searchDisplayController.searchResultsTableView];
    cellIndexPath = [self.searchDisplayController.searchResultsTableView indexPathForRowAtPoint:location];
}
else
{
    location = [gesture locationInView:self.tableView];
    cellIndexPath = [self.tableView indexPathForRowAtPoint:location];
}