如何实现UIButton的双击

项目中需要实现点击一个cell里面的UIImageView实现跳转,双击UIImageView实现商品收藏,很简单的功能,记录一下。


Snip20160411_105.png

思路1:UIImageView上面加手势
缺点:手势点击的时候会先触发cell的点击事件。
1.1首先UIImageView允许与用户交互

Paste_Image.png

1.2 在UIImageView上面添加两个手势,分别为单击手势和双击手势。

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleTap:)];
    [singleTapGestureRecognizer setNumberOfTapsRequired:1];
 [self.imageViewR addGestureRecognizer:singleTapGestureRecognizer];
    
UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(doubleTap:)];
[doubleTapGestureRecognizer setNumberOfTapsRequired:2];
[self.imageViewR addGestureRecognizer:doubleTapGestureRecognizer];

注意要在手势创建之后设置手势的点击次数setNumberOfTapsRequired来区分。然后再分别实现singleTap:和doubleTap:两个方法。


方法2:完美实现 button 添加Target
2.1 在UIImageView上面加一个透明的和UIImageView大小相同的UIButton, 我们叫它purpleButton,我们将其拖为属性。
2.2 在初始化方法(awakeFromNib 或者 init 之类)中 增加两个target.

[self.purpleButton addTarget:self action:@selector(doubleClick:forEvent:) forControlEvents:UIControlEventTouchDownRepeat];
[self.purpleButton  addTarget:self action:@selector(singleClick:forEvent:) forControlEvents:UIControlEventTouchDown];

注意事件都是touchDown 只不过一个是双击的touchDownRepeat

2.3 通过performSelector实现doubleClick:forEvent: 和 singleClick:forEvent:

单击事件:

-(void)singleClick:(UIButton *)button forEvent:(UIEvent *)event{
   
 [self performSelector:@selector(tabButtonTap:) withObject:button afterDelay:0.2];

}
- (void)tabButtonTap:(UIButton *)sender {
    NSLog(@"单击操作");
}

双击事件:


-(void)doubleClick:(UIButton *)button forEvent:(UIEvent *)event
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tabButtonTap:) object:button];
    
    NSLog(@"双击操作");
    
}

这个方法

 [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tabButtonTap:) object:button];

🍎解释是Cancels perform requests previously registered with performSelector:withObject:afterDelay:
就是把performSelector:withObject:afterDelay:以前注册的请求取消掉,从代码上看就是取消了tabButtonTap:方法。
但是只能在一个运行循环范围内有效。所以通过这样子就把单击的事件取消了,在后面就可以实现双击的操作,而不必担心会先触发单击。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容