web-dev-qa-db-ja.com

MKMapView:アノテーションピンでクリックされたイベントを取得する

いくつかのMKMapViewピンを含むMKAnnotationを使用しています。
マップの上に、UITableViewピンの詳細情報を含むMKAnnotationを示しています。

私の問題:ピンを選択するときに、対応するテーブルセルを選択したいと思います。このために、ピンが選択されている場合は、イベント/デリゲートをキャッチしたいと思います。コールアウトアクセサリの呼び出しについて話しているのではありません

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control  
19
squeezer123

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

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

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

[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
        }
    }
}
3
user207616

MapKitでこれを行う簡単な方法を見たことがありません。デリゲートにはmapView:annotationWasTapped:はありません。

これを行う1つの方法は、独自の注釈ビューサブクラスを提供することです。カスタム注釈ビューは、setSelected:animated:または下位レベルのイベントハンドラーでピン選択をキャプチャし、その情報をビューコントローラーに渡すことができます。

1
Will Harris