UITableview didSelectRowAtIndexPath取代UITapGestureRecognizer的双击手势

kri*_*ris 6 iphone uitableview uigesturerecognizer ios

我用双击UITapGestureRecognizer设置了一个UITableView.但是,用户双击单元格的尝试只是两次启动didSelectRowAtIndexPath.这两个应该一起工作吗?

(我知道我可以用一个单击手势识别器来代替didSelectRowAtIndexPath的内置行为,但是这里的问题是:单元格还有一个按钮,当我添加单击时我不能按下手势识别器.此外,我已经看到用户在didSelectRowAtIndexPath中构建双击功能的例子,但这不是一个太多的黑客?)

use*_*951 11

有关更多信息Kris'回答:

  • cancelsTouchesInView
  • delaysTouchesBegan
  • delaysTouchesEnded

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html

在我的情况下,我在向UIImageView自定义上添加2个轻击手势时遇到了问题UITableViewCell.发生了什么事情是didSelectRowAtIndexPath:当您点击/双击时发生的UIImageView.当我只有一个轻击手势时,didSelectRowAtIndexPath:没有被调用(对我来说,这是正确的行为.

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

tapGesture.cancelsTouchesInView = YES;
tapGesture.delaysTouchesBegan = YES;
Run Code Online (Sandbox Code Playgroud)

在此更改后,UIImageView(自定义单元格顶部)上的tap/double 未触发didSelectRowAtIndexPath:


kri*_*ris 5

看起来我可以使用手势识别器的delaysTouchesBegan和cancelsTouchesInView属性很好地使用didSelectRowAtIndexPath和双击手势识别器.

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


msg*_*bel 2

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