3

マップビューを備えたアプリがあり、マップ上に(配列からの)20個のピンが表示されます。ユーザーがそれをクリックすると、右のアクセサリボタンでバブルが表示されます。ここに私の問題があります:どのピンが押されたかをどうやって知ることができますか?mapView:didSelectAnnotationViewメソッドについて何か聞いたのですが、配列の同じインデックスでオブジェクトの情報を取得できるように、ピン/コールアウトインデックスを取得する方法がよくわかりません。助けてくれてありがとう!

4

2 に答える 2

6

そのメソッドが呼び出されると、viewControllerクラスがを採用しているため、配列をMKMapViewDelegate呼び出し-indexOfObjectてそのピンのインデックス(アノテーション)を取得できます。これは、配列が一種のアノテーションクラスのオブジェクトを保持していることを前提としています。

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

さらに説明が必要な場合は、これらのピンをどのように追加しているか、つまりの実装を知る必要があります- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation

于 2012-03-24T01:50:24.730 に答える
0

これはCanopusと同様のソリューションです。

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    if ([view.annotation isKindOfClass:[MyAnnotation class]]) 
    {
        NSInteger index = [mapView.annotations indexOfObject:view.annotation];
        NSLog(@"%d",index);
    }

注:手動で地図に注釈を追加してから、それぞれのインデックスを表示していました。mapViewに追加された順序でインデックスが作成されません。つまり、4番目の注釈として注釈を追加したという理由だけで、1または3などのインデックスを持つ可能性があります。誰かがそれについて説明しているかもしれませんが、それは今まで私を理解していませんでした。お役に立てれば。

于 2012-03-27T03:57:13.520 に答える