UITableView:可以通过点击手势检测单元格选择,但不能检测 didSelectRowAtIndexPath

Posted

技术标签:

【中文标题】UITableView:可以通过点击手势检测单元格选择,但不能检测 didSelectRowAtIndexPath【英文标题】:UITableView: Can detect cell selection via tap gesture but not didSelectRowAtIndexPath 【发布时间】:2013-04-24 18:35:51 【问题描述】:

我在WEPopover 中嵌入了一个 UITableView。我可以看到整个视图并选择除了底部的单元格之外的单元格。按下底行不会导致调用 didSelectRowAtIndexPath。我尝试在视图中添加一个 UITapGestureRecognizer 来拦截触摸并使用下面的代码计算相应的单元格,发现它可以工作。我试图理解为什么即使表格视图正在接收触摸事件,也没有调用 didSelectRowAtIndexPath。

CGPoint touchLocation = [sender locationInView:self.tableView];
NSIndexPath *tappedIndexPath = [self.tableView indexPathForRowAtPoint:touchLocation];
NSInteger row = [tappedIndexPath row];

任何想法都将不胜感激。

【问题讨论】:

我怀疑 WEPopver 会添加一个透明视图来捕捉所有触摸并在触摸外部时关闭。您是否在表格视图(不是它的父级)上添加了手势识别器?另外,当您点击表格视图的可见部分时,WEPopover 是否会关闭? 【参考方案1】:

摆脱 UITapGestureRecognizer,你不需要它。我的猜测是

1) 你的 WEPopover 比你的 UITableView 小。将 WEPopover 上的 clipsToBounds 属性设置为 YES 并查看是否仍有此问题。您还可以仔细检查 UITableView 框架和 WEPopover 框架的高度,并确保它们相同。

2)您有某种透明视图覆盖了底部单元格。检查您的视图层次结构并将透明视图的颜色设置为 [UIColor redColor] 之类的颜色,并确保您的 UITableView 顶部没有任何东西。

你能触摸底部的单元格并滚动吗?

【讨论】:

手势识别器用于确定表格视图的可视部分是否响应触摸。在这种情况下,您的两个条件都不成立。不,触摸滚动不适用于底部。就像 tableview 正在触摸那部分(手势识别器)但没有将它们转换为 UITableView 事件。

以上是关于UITableView:可以通过点击手势检测单元格选择,但不能检测 didSelectRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

处理 UITableView 单元格上的平移手势

ios - UITableView 删除按钮不会对手势做出反应

滑动删除单元格不会取消 UIButton 操作

iOS - 忽略点击手势

保存 UITableView 单元格附件的状态?

如何向 UITableViewCell 添加手势?