MKMapView: получить событие clicked на значке аннотации
Я использую MKMapView
, содержащий пару контактов MKAnnotation
.
Над картой я показываю UITableView
с подробной информацией о контактах MKAnnotation
.
Моя проблема: когда я выбираю pin, я бы хотел выбрать соответствующую ячейку таблицы.
Для этого я хотел бы поймать событие/делегат, если выбран контакт. Я не говорю о вызове аксессуара выноски
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
Ответы
Ответ 1
Просто обновление для этого - в iOS 4 существуют методы MKMapViewDelegate, которые можно использовать для отслеживания выбора и отмены выбора аннотации:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
Ответ 2
вы можете использовать Observer для выбранного события:
[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
Я не видел простой способ сделать это в MapKit. Там нет mapView:annotationWasTapped:
для делегата.
Один из способов сделать это - предоставить свой собственный подзадачный вид аннотации. Пользовательское представление аннотаций может захватывать выбор штифта в setSelected:animated:
или в обработчике событий нижнего уровня и передавать эту информацию до вашего контроллера вида.