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

时间:2016-10-06 13:37:40

标签: ios objective-c uiscrollview uigesturerecognizer uitouch

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

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

滚动视图需要相当多的触摸逻辑才能跟踪,并且必须与按钮的触摸逻辑和手势识别器混淆。

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

  1. 不要像在IB或代码中那样给按钮一个目标/动作

  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];
    
  4. 然后,而不是你的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");
        }
    }