4

非常に簡単な質問があります: MKAnnotation がマップ上で選択されているかどうかを確認するにはどうすればよいですか?

選択した like (GET) プロパティが表示されません。

選択/選択解除されたイベントをトリガーし、その結果をプロパティに保存して、必要に応じてチェックすることで解決しないことを願っています。もっと簡単なものがあるはずです。

どうもありがとう!

4

3 に答える 3

6

MKMapView のデリゲート メソッドをdidSelectAnnotationView:使用すると、イベント MKAnnotation Selected を取得できます。

-(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];
    }
}

それがあなたを助けることを願っています。

于 2013-05-06T17:10:59.557 に答える
1

これに対する単なる更新 -- iOS 4 には、MKMapViewDelegate注釈の選択と選択解除を追跡するために使用できるメソッドがあります。

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

選択した注釈イベントにオブザーバーを使用できます。

[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
        }
    }
}
于 2013-05-06T17:11:11.040 に答える