【问题标题】:button action gets called before double tap gesture method在双击手势方法之前调用按钮操作
【发布时间】:2016-10-06 13:37:39
【问题描述】:
我有一个scrollview,其中添加了一个button,现在我想对按钮进行操作以及双击手势。
如果按钮位于UIView,则按钮的操作和双击手势方法都可以完美运行。但是如果按钮出现在UIScrollView 上,那么就会调用动作,然后是双击手势方法。
任何帮助将不胜感激。
【问题讨论】:
标签:
ios
objective-c
uiscrollview
uigesturerecognizer
uitouch
【解决方案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");
}
}