在双击手势方法之前调用按钮操作

Posted

技术标签:

【中文标题】在双击手势方法之前调用按钮操作【英文标题】:button action gets called before double tap gesture method 【发布时间】:2016-10-06 13:37:39 【问题描述】:

我有一个scrollview,其中添加了一个button,现在我想对按钮进行操作以及双击手势。

如果按钮位于UIView,则按钮的操作和双击手势方法都可以完美运行。但是如果按钮出现在UIScrollView 上,那么就会调用动作,然后是双击手势方法。

任何帮助将不胜感激。

【问题讨论】:

您可以尝试点击手势来实现单击和双击按钮 【参考方案1】:

滚动视图需要大量的触摸逻辑来跟踪,这一定会与按钮的触摸逻辑和手势识别器混淆。

没有进一步调查,我会通过您控制的两个手势识别器处理按钮的点击来解决这个问题,无论父视图如何,这都应该工作。

    不要像通常在 IB 或代码中那样为按钮指定目标/动作

    创建单击手势识别器来处理按钮操作。

    创建一个双击 gr,你可能已经这样做了。将两者都添加到按钮中。

    // for your current target-action behavior 
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(singleTap:)];
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(doubleTap:)];
    
    singleTap.numberOfTapsRequired = 1;
    doubleTap.numberOfTapsRequired = 2;
    [singleTap requireGestureRecognizerToFail:doubleTap];
    
    [button addGestureRecognizer:singleTap];
    [button addGestureRecognizer:doubleTap];
    

然后,代替您的 IBAction 方法...

- (void)singleTap:(UIGestureRecognizer *)gr 
    if (gr.state == UIGestureRecognizerStateRecognized) 
        // target-action behavior here
        NSLog(@"single tapped");
    


- (void)doubleTapped:(UIGestureRecognizer *)gr 
    if (gr.state == UIGestureRecognizerStateRecognized) 
        NSLog(@"double tapped");
    

【讨论】:

以上是关于在双击手势方法之前调用按钮操作的主要内容,如果未能解决你的问题,请参考以下文章

我可以双击 tkinter 列表框选项来调用 Python 中的函数吗?

在 UICollectionViewCell 上双击手势?

jquery on click 功能仅在双击时起作用

安装程序在使用 Process.Start() 启动时失败,但在双击时工作

系统导航是手势时如何调用onUserLeaveHint?

iOS10 UITextView 触摸事件崩溃