Ios UITapgestureRecognitor中的objective c mkmapview如何测试他们是否点击了注释

Ios UITapgestureRecognitor中的objective c mkmapview如何测试他们是否点击了注释,ios,objective-c,mkmapview,Ios,Objective C,Mkmapview,我允许用户点击屏幕上的任何位置,也允许他们点击注释以显示与注释相关的文本 为了让他们点击屏幕上的任何地方,我设置了一个TapGestureRecognizer 问题是,当他们点击注释时,tapgesturerecognizer事件发生在didSelectAnnotationView之前,因此我在不想点击时执行tapgesturerecognizer 我是否可以在tapgesturerecognizer中测试他们是否点击了注释?我遇到了与LongSirte相同的问题,您可以使用UIGestureR

我允许用户点击屏幕上的任何位置,也允许他们点击注释以显示与注释相关的文本

为了让他们点击屏幕上的任何地方,我设置了一个TapGestureRecognizer

问题是,当他们点击注释时,tapgesturerecognizer事件发生在didSelectAnnotationView之前,因此我在不想点击时执行tapgesturerecognizer


我是否可以在tapgesturerecognizer中测试他们是否点击了注释?

我遇到了与LongSirte相同的问题,您可以使用UIGestureRecognizerDelegate来防止调用手势动作

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isKindOfClass:[MKPinAnnotationView class]])
    {
        return NO;
    }
    return YES;
}
注意:别忘了用轻触手势设置委托。

解决方案:

在我的标题.h中,我添加了代理:

@interface myVC : UIViewController <UIGestureRecognizerDelegate>
请注意Nirav表示需要添加的代表声明

然后我添加了Nirav的代码,但更改了IF语句:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
  if (([touch.view isKindOfClass:[MKPinAnnotationView class]]) || ([touch.view isKindOfClass:[MKAnnotationView class]]))
  {
    return NO;
  }
  return YES;
}

非常感谢这使我走上了正确的道路,但我必须为MKAnnotationView添加一个额外的测试,以使其工作,因为当我点击注释时,MKPinAnnotationView没有被识别。请参阅下面的扩展代码。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
  if (([touch.view isKindOfClass:[MKPinAnnotationView class]]) || ([touch.view isKindOfClass:[MKAnnotationView class]]))
  {
    return NO;
  }
  return YES;
}