Iphone UITableview didSelectRowAtIndexPath取代UIAPTESTITURE识别器的双击手势

Iphone UITableview didSelectRowAtIndexPath取代UIAPTESTITURE识别器的双击手势,iphone,ios,uitableview,uigesturerecognizer,Iphone,Ios,Uitableview,Uigesturerecognizer,我已使用双击UITapGestureRecognitor设置了一个UITableView。但如果用户试图双击某个单元格,则只会启动两次DidSelectRowatineXpath。这两个人应该一起工作吗 (我知道我可以使用单点击手势识别器来代替DidSelectRowatineXpath的内置行为,但问题是:当我添加单点击手势识别器时,该单元格还有一个按钮,我无法再按下。此外,我还看到过用户在DidSelectRowatine中构建双点击功能的例子xPath,但这不是有点太麻烦了吗?)即使单元格

我已使用双击UITapGestureRecognitor设置了一个UITableView。但如果用户试图双击某个单元格,则只会启动两次DidSelectRowatineXpath。这两个人应该一起工作吗


(我知道我可以使用单点击手势识别器来代替DidSelectRowatineXpath的内置行为,但问题是:当我添加单点击手势识别器时,该单元格还有一个按钮,我无法再按下。此外,我还看到过用户在DidSelectRowatine中构建双点击功能的例子xPath,但这不是有点太麻烦了吗?)

即使单元格中有按钮,您也可以使用一个轻触手势识别器来代替
didSelectRowAtIndexPath
。您只需检查触摸位置是否在
UIButton
的视图中,即可处理这两种情况。希望有帮助!

看起来我可以获得didSelectRowAtIndexPat使用手势识别器的delaysTouchesBegan和CancelsTouchesView属性,h和双击手势识别器可以很好地配合使用


@MSgambel描述的另一个选项似乎也同样有效。

有关克里斯答案的更多信息:

  • 取消图切辛视图
  • 斯多切斯贝根酒店
  • 迟钝的

在我的例子中,向自定义
UITableViewCell
上的
UIImageView
添加两个点击手势时出现问题。发生的是当你点击/双击
UIImageView
时调用了
didSelectRowAtIndexPath:
。当我只有一个点击手势时,
didSelectRowAtIndexPath:
打电话(对我来说,这是正确的行为

为了防止在使用两个点击手势(单/双点击)时调用
didSelectRowAtIndexPath:
,我将此代码添加到第一个点击手势(单点击手势)中:

更改后,点击/双击
UIImageView
(位于自定义单元格顶部)并没有触发
didSelectRowAtIndexPath:

我测试了“DelayTouchesStart”方法,但我发现表接收到的单个点击会被延迟,从而使表交互对用户的响应变差,并且可能会令人讨厌

我的解决方案有点平淡无奇,但我在方法didSelectRowAtIndexPath中使用计时器来检测点击。我在第一次点击时记录点击次数“1”,如果用户在0.2秒内没有再次点击,则显示所选项目。如果用户在0.2秒内点击次数“2”,则我显示另一个项目(操作表).我每次都重置抽头计数


此方法使用了更多的代码,但从界面提供了快速响应,用户不需要知道幕后发生了什么-只要UI有响应即可。

正确-您谈论的是设置代理,然后实现GestureReceiveTouch:或GestureReceignizerShouldBegin。感谢提醒r、 我将尝试让这项功能正常工作,然后接受作为答案。此外,听起来像是你说你同意我在上面原始问题中的场景不起作用?是的,因为方法
didSelectRowAtIndexPath
将截获触摸事件,因为它比手势识别器具有优先级,而且因为你很可能会执行它mented,手势识别器永远不会被调用。事实上,我还没有对其进行彻底测试,但我看到,对于手势识别器,属性delaysTouchesBegan和cancelsTouchesInView设置为YES,为我提供了所需的行为。感谢您的输入。我对创建计时器来处理此问题的想法表示怀疑,但我有一个创造性的想法尽管如此,dea。谢谢!在使用内置识别器时,延迟时间太长了,所以我倾向于同意用户会更喜欢它提供的响应能力,尽管它在幕后有点黑客。我想要一个类似的功能。即使设置了
cancelsTouchesInView
delaysTouchesBegan
,我也无法调用双击处理程序。
tapGesture.cancelsTouchesInView = YES;
tapGesture.delaysTouchesBegan = YES;