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

button action gets called before double tap gesture method

我有一个 scrollview,上面添加了一个 button,现在我想为按钮提供动作和双击手势。

如果按钮处于打开状态 UIView,则按钮操作和双击手势方法都可以正常工作。但是,如果按钮出现在 UIScrollView 上,则会调用操作,然后是双击手势方法。

如有任何帮助,我们将不胜感激。

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

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

  1. 不要像通常在 IB 或代码中那样给按钮一个 target/action

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

  3. 像您可能已经做的那样创建双击 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");
    }
}