检查地图上是否选择了MKAnnotation?

时间:2013-05-06 17:03:57

标签: ios mapkit mkannotationview

我有一个非常简单的问题:如何检查地图上是否选择了MKAnnotation?

我看不到选中的(GET)属性。

我希望解决方案不是通过触发选定/取消选择的事件并将其结果存储在属性中,并在需要时检查它们。必须有一个更直接的。

非常感谢!

3 个答案:

答案 0 :(得分:6)

利用MKMapView didSelectAnnotationView:的委托方法使用可以获取事件MKAnnotation选择

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
    // Annotation is your custom class that holds information about the annotation
    if ([view.annotation isKindOfClass:[Annotation class]]) {
        Annotation *annot = view.annotation;
        NSInteger index = [self.arrayOfAnnotations indexOfObject:annot];
    }
}

希望它会对你有所帮助。

答案 1 :(得分:6)

结帐-[MKMapView selectedAnnotations]

答案 2 :(得分:1)

只是对此进行了更新 - 在iOS 4中,有MKMapViewDelegate种方法可用于跟踪注释选择和取消选择:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view

您可以使用Observer for Selected annotation Event:

[pin addObserver:self
      forKeyPath:@"selected" 
         options:NSKeyValueObservingOptionNew
         context:@"ANSELECTED"];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{

    NSString *action = (NSString*)context;

    if([action isEqualToString:@"ANSELECTED"]){

        BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
        if (annotationAppeared) {
            // clicked on an Annotation
        }
        else {
            // Annotation disselected
        }
    }
}