いくつかのMKMapView
ピンを含むMKAnnotation
を使用しています。
マップの上に、UITableView
ピンの詳細情報を含むMKAnnotation
を示しています。
私の問題:ピンを選択するときに、対応するテーブルセルを選択したいと思います。このために、ピンが選択されている場合は、イベント/デリゲートをキャッチしたいと思います。コールアウトアクセサリの呼び出しについて話しているのではありません
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
これに対する単なる更新-iOS4には、注釈の選択と選択解除を追跡するために使用できる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
}
}
}
MapKitでこれを行う簡単な方法を見たことがありません。デリゲートにはmapView:annotationWasTapped:
はありません。
これを行う1つの方法は、独自の注釈ビューサブクラスを提供することです。カスタム注釈ビューは、setSelected:animated:
または下位レベルのイベントハンドラーでピン選択をキャプチャし、その情報をビューコントローラーに渡すことができます。