带有 Touch Up Inside 和 Touch Repeat 的 UIButton?

Posted

技术标签:

【中文标题】带有 Touch Up Inside 和 Touch Repeat 的 UIButton?【英文标题】:UIButton with both Touch Up Inside and Touch Repeat? 【发布时间】:2013-08-16 19:57:46 【问题描述】:

让按钮能够同时执行Touch Up Inside 操作和Touch Down Repeat 操作的最佳方法是什么?有点像 iPhone 上的 Home 按钮:单击一次进入主屏幕,但快速单击两次打开多任务栏。现在我的按钮已经连接了这两种方法,但是Touch Up Inside 方法(不出所料)在Touch Down Repeat 发生之前被调用。

我可以想出一些方法来解决这个问题(让 Touch Up Inside 方法等待一秒钟,看看在执行之前是否有另一次点击,在第一次点击后让第二个按钮不可见地移动到适当的位置,等等)但是它们似乎都有些hack-y,并且对性能损失和错误持开放态度。我找到了 tapCount 属性,但它是用于 UITouch 而不是 UIButton,所以 if([_buttonAddItems tapCount] > 1) else if([_buttonAddItems tapCount] == 1),这似乎是最有效的方法,但不起作用。

这类事情有最佳实践吗?或者如果没有,有没有人有首选的方法来完成这项工作?

【问题讨论】:

【参考方案1】:

尝试断开按钮与两个触摸事件的连接,并将两个轻击手势识别器挂接到它。这是一个link to an answer,它解释了如何设置两个手势识别器,以便其中一个识别单击,另一个识别双击:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(doSingleTap)];
singleTap.numberOfTapsRequired = 1; 
[myButton addGestureRecognizer:singleTap];

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(doDoubleTap)];
doubleTap.numberOfTapsRequired = 2; 
[myButton  addGestureRecognizer:doubleTap];
// This is the "secret sauce":
[singleTap requireGestureRecognizerToFail:doubleTap];

【讨论】:

我以前从未使用过 GestureRecognizers,但这看起来正是我想要的,谢谢!

以上是关于带有 Touch Up Inside 和 Touch Repeat 的 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 子类忽略“Touch Up Inside”事件

UISlider 返回两个 Touch Up Inside 事件,为啥会这样?

第二个视图控制器中的 UIButton - Touch Up Inside 不起作用(Touch Down 可以)

iOS:UIButton touch up inside 不响应多次按下

touch

Wanna Scale up view inside 根据视图的大小,根据设备而变化