【问题标题】:Wrong Tap Coordinates After Search in UITableView在 UITableView 中搜索后点击坐标错误
【发布时间】:2013-12-03 22:05:21
【问题描述】:

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

我有一个带有 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 时的行为与输入搜索词时的行为不同。

感谢您的帮助, 抢

【问题讨论】:

  • 为什么需要使用坐标?滚动+坐标是自找麻烦。
  • 使用坐标,因为我正在处理手势。为了获得被点击的单元格,我必须首先在 UITableView 中获得 CGPoint。但是,我找到了我的解决方案。我已将其添加为答案。感谢您的回复!
  • 当您点击一个单元格时,您的 TableViewDelegate 方法将触发。它们通过 indexPath 引导您到确切的单元格。实施自己的行为似乎很危险/没有必要
  • 你是对的,但从我阅读的所有内容和我的经历来看,didSelectRowAtIndex 在我打算双击时拦截了第一次点击(我永远不会得到双击)。我找到的解决方案是使用手势。不知道你所说的危险是什么意思,但如果有更好的方法来获得双击手势,同时还使用 didSelectRowAtIndex,我可以理解这是不必要的。
  • 危险,因为它会导致像你这样的错误。为什么你希望你的用户双击?单击一下会发生什么?

标签: ios iphone objective-c uitableview


【解决方案1】:

哇,有时写下问题会引导您找到解决方案……这就是我意识到的。我将 UISearchBar 与 UISearchDisplayController 一起使用。我的初步理解是搜索时,UISearchDisplayController 将tableView 替换为自己的来显示结果。在这种情况下,我上面的代码在搜索时尝试获取点击的单元格时查看了错误的 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];
}

【讨论】:

    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    相关资源
    最近更新 更多