我已经使用双击UITapGestureRecognizer设置了一个UITableView。但是,用户双击单元格的尝试只是两次启动didSelectRowAtIndexPath。这两个应该一起工作吗?
(我知道我可以使用单击手势识别器代替didSelectRowAtIndexPath的内置行为,但是问题就在于:单元格还有一个按钮,当我添加时我不能按下单击手势识别器。此外,我已经看到用户在didSelectRowAtIndexPath中建立双击功能的例子,但是这不是一个太多的黑客攻击吗?)
答案 0 :(得分:11)
有关Kris回答的更多信息:
在我的情况下,向自定义UIImageView
上的UITableViewCell
添加2个点按手势时出现问题。当你点击/双击didSelectRowAtIndexPath:
时,UIImageView
被调用了。当我只有一个轻击手势时,didSelectRowAtIndexPath:
没有被调用(对我而言,这是正确的行为。
为防止在使用两个点击手势(单击/双击)时调用didSelectRowAtIndexPath:
,我将此代码添加到第一个点击手势(单个手势):
tapGesture.cancelsTouchesInView = YES;
tapGesture.delaysTouchesBegan = YES;
更改后,UIImageView
(自定义单元格顶部)上的点按/双击不会触发didSelectRowAtIndexPath:
答案 1 :(得分:5)
看起来我可以使用手势识别器的delaysTouchesBegan和cancelsTouchesInView属性来获得didSelectRowAtIndexPath和双击手势识别器,以便很好地一起玩。
@MSgambel描述的另一个选项似乎同样有效。
答案 2 :(得分:1)
您 可以 使用单个 -tap手势识别器代替didSelectRowAtIndexPath
,即使其中有一个按钮细胞。您只需要检查触摸位置是否在UIButton
视图内,以便处理这两种情况。希望有帮助!
答案 3 :(得分:1)
我用双击测试了“delayTouchesBegan”方法,但我发现表格收到的单击然后被延迟,使得表格交互对用户的响应性降低,并且可能很烦人。
我的解决方案有点行人但我使用计时器检测方法didSelectRowAtIndexPath中的点击。我为第一次点击录制了点按数“1”,如果用户没有再次点击0.2秒,则显示所选项目。如果用户在0.2秒内轻敲了抽头计数“2”,则我显示另一个项目(操作表)。我每次都重置点击次数。
此方法使用更多代码,但从界面提供快速响应,用户无需知道幕后发生了什么 - 只是UI响应。