Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何阻止UITapGestureRecognizer捕捉每一次点击?_Iphone_Objective C_Button_Conflict_Uigesturerecognizer - Fatal编程技术网

Iphone 如何阻止UITapGestureRecognizer捕捉每一次点击?

Iphone 如何阻止UITapGestureRecognizer捕捉每一次点击?,iphone,objective-c,button,conflict,uigesturerecognizer,Iphone,Objective C,Button,Conflict,Uigesturerecognizer,您好,我有一个opengl视图,上面有一个选项卡栏。我正在使用点击识别器点击屏幕上的不同3d对象。在选项卡栏中,我有一个按钮,但它不工作,因为点击识别器也捕捉到这些点击。我该怎么阻止这一切?我已经试过了: - (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isKindOfClass:[UIBarBu

您好,我有一个opengl视图,上面有一个选项卡栏。我正在使用点击识别器点击屏幕上的不同3d对象。在选项卡栏中,我有一个按钮,但它不工作,因为点击识别器也捕捉到这些点击。我该怎么阻止这一切?我已经试过了:


- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
  if ([touch.view isKindOfClass:[UIBarButtonItem class]]) return FALSE;
  return TRUE;
}
我想我在某种程度上比较了错误的类,因为当我调试时,它总是返回TRUE

if ([touch.view.superview isKindOfClass:[UIToolbar class]]) return FALSE; if([touch.view.superview iskindof类:[UIToolbar类]])返回FALSE;
我就是这样让它工作的。superview是一个UIToolbar,可能毕竟是
UIBarButtonitItem

或者您可以只执行
[singleTap setCancelsTouchesInView:NO]
。例如:

UITapGestureRecognizer *singleTap = [
    [UITapGestureRecognizer alloc]
    initWithTarget: self
    action: @selector(yourSelector:)
];
[singleTap setCancelsTouchesInView:NO];
[[self view] addGestureRecognizer: singleTap];

if语句永远不会返回false-按钮不是视图。。。但是您可以通过调试器中的断点检查您在不同点击位置上获得的视图类型。哦..我刚刚注意到
UIBarButtonItem
不是
UIView
:)谢谢。这在手势识别器视图的命中测试失败的情况下起作用。要明确的是,我在UITableView中工作,手势的位置被报告为
{0,contentOffset-someConstant}
。检查触摸屏的视图是一个很好的解决方案。谢谢。在“界面生成器”中也可以在“视图”中取消。伟大的唯一有效的方法。我想补充一句,这是一种魅力!不要弄乱代码的其余部分。太棒了!