在双击手势方法之前调用按钮动作
button action gets called before double tap gesture method
我有一个 scrollview
,上面添加了一个 button
,现在我想为按钮提供动作和双击手势。
如果按钮处于打开状态 UIView
,则按钮操作和双击手势方法都可以正常工作。但是,如果按钮出现在 UIScrollView
上,则会调用操作,然后是双击手势方法。
如有任何帮助,我们将不胜感激。
滚动视图需要大量的触摸逻辑来跟踪,这一定会与按钮的触摸逻辑和您的手势识别器混淆。
在不进一步调查的情况下,我会通过您控制的两个手势识别器处理按钮的点击来解决这个问题,无论父视图如何,它们都应该工作。
不要像通常在 IB 或代码中那样给按钮一个 target/action
创建一个单击手势识别器来处理按钮操作。
像您可能已经做的那样创建双击 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");
}
}
我有一个 scrollview
,上面添加了一个 button
,现在我想为按钮提供动作和双击手势。
如果按钮处于打开状态 UIView
,则按钮操作和双击手势方法都可以正常工作。但是,如果按钮出现在 UIScrollView
上,则会调用操作,然后是双击手势方法。
如有任何帮助,我们将不胜感激。
滚动视图需要大量的触摸逻辑来跟踪,这一定会与按钮的触摸逻辑和您的手势识别器混淆。
在不进一步调查的情况下,我会通过您控制的两个手势识别器处理按钮的点击来解决这个问题,无论父视图如何,它们都应该工作。
不要像通常在 IB 或代码中那样给按钮一个 target/action
创建一个单击手势识别器来处理按钮操作。
像您可能已经做的那样创建双击 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");
}
}