Objective c 我是否可以检测用户是否接触过地图上除注释以外的任何地方?

Objective c 我是否可以检测用户是否接触过地图上除注释以外的任何地方?,objective-c,ios,mkannotation,Objective C,Ios,Mkannotation,我正在构建一个应用程序,我想知道用户何时触摸了注释或地图上的任何其他地方。我有一个按钮,仅在选择注释时才显示该按钮。所以,如果用户在注释后尝试触摸地图上的任何地方(如果不是另一个注释),则使按钮不可见 目前,我已经尝试了touchesend方法,但问题是它不能识别注释和land - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ if([touches isMemberOfClass:[BuildingV

我正在构建一个应用程序,我想知道用户何时触摸了注释或地图上的任何其他地方。我有一个按钮,仅在选择注释时才显示该按钮。所以,如果用户在注释后尝试触摸地图上的任何地方(如果不是另一个注释),则使按钮不可见

目前,我已经尝试了touchesend方法,但问题是它不能识别注释和land

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

    if([touches isMemberOfClass:[BuildingViewController class]])
        printf("Building");
    else
        printf("Land!");
}

提前感谢。

触摸
是类为
NSSet
的对象,因此您可以从
NSSet
获取对象并检查其类成员资格。例如:

UITouch *touch = [touches anyObject];
你可以通过触摸屏查看

UIView *touchedView = touch.view;
然后检查此UIView类并将其与您的进行比较

[touchedView isMemberOfClass:[BuildingView class]]
我还建议您检查NSSet中的所有接触

BOOL isBuilding = NO;

for(UITouch *touch in touches){
    if([touch.view isMemberOfClass:[BuildingView class]]){
        isBuilding = YES;
        break;
    }
}

if(isBuilding){
    printf("Building");
}else{
    printf("Land!");
}

你好,丹尼斯。谢谢你的关注。我采纳了你的建议,但仍然面临同样的问题。触摸注释,但打印出土地!我可以确认是否触摸了批注,因为在didSelectAnnotationView方法中,我激活了按钮,并且它工作正常。我也试过,但还是…:(好的,你能在(UITouch*touch-in-Touchs){之后添加行NSLog(@“%@,[BuildingView类])并将打印出来的内容复制到这里吗?好的。你会认为我是在开玩笑,但这里是打印出来的内容:2012-11-15 13:02:01.811 CoL[849:c07]BuildingView Land!哦,我的错误。请将NSLog(@“%@,[BuildingView类])更改为NSLog(@“%@”,[touch.view class]);并复制打印出来的内容不用担心!我想知道如何在前一行打印不同的类,但Obj-C总是让我惊讶:)。我可以从这里看到错误。现在,它正在打印出来,2012-11-15 13:30:41.037 CoL[1047:c07]MKPinAnnotationView Land!…需要重新定义自定义BuildingView类或更改“isMemberOf[]”语句吗?