ここでは、さまざまなテクニックを使用できます。
たとえば、annotationView ごとに ivar を保持して、次のようにすることができます。
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
if (view == myFirstAnnotationView) {
//do something
}
if (view == mySecondAnnotationView) {
//do something
}
if (view == myThirdAnnotationView) {
//do something
}
}
または、注釈ビューのタグ値を使用できます。
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
if ([view.tag isEqualToString@"one"]) {
}
if ([view.tag isEqualToString@"two"]) {
}
}
または、MKAnnotationView をサブクラス化して、いくつかの動作を追加することもできます。
- (void)mapView:(MKMapView *)mapView annotationView:(MyMKAnnotationViewSubclass *)view calloutAccessoryControlTapped:(UIControl *)control {
[view doAMethodIMadeWhenISubclassed];
}
これらはいずれも完全な解決策ではなく、アプリケーションと設計をよく理解せずに提供することは困難ですが、それらすべてに共通しているのは、何をすべきかを決定するためにマップに追加する前に、annotationView を変更することです。デリゲート コールバックが発生した後。これがあなたを正しい道に導いてくれることを願っています。