MKMapView: получение события щелчка на аннотации

Я использую MKMapView, содержащий пару MKAnnotation контактов.
Над картой я показываю UITableView с подробной информацией о MKAnnotation контактах.

Моя проблема: когда я выбираю контакт, я хочу выбрать соответствующую ячейку таблицы. Для этого я хотел бы поймать событие / делегата, если выбрана булавка. Я не говорю о вызове аксессуара выноски

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

person squeezer123    schedule 21.10.2009    source источник


Ответы (3)


Просто обновление к этому - в iOS 4 есть методы MKMapViewDelegate, которые можно использовать для отслеживания выбора и отмены выбора аннотации:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
person software evolved    schedule 14.03.2011
comment
Если вы хотите знать, нажимает ли пользователь развернутую / выбранную аннотацию, вы можете проверить view.selected == YES в didSelectAnnotationView - person nylund; 02.07.2012

вы можете использовать наблюдателя для выбранного события:

[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
        }
    }
}
person Community    schedule 10.11.2009

Я не видел простого способа сделать это в MapKit. На делегате нет mapView:annotationWasTapped:.

Один из способов сделать это - предоставить собственный подкласс вида аннотации. Пользовательское представление аннотации может захватывать выбор вывода в setSelected:animated: или в обработчике событий более низкого уровня и передавать эту информацию на ваш контроллер представления.

person Will Harris    schedule 21.10.2009
comment
Я тоже так делал. Странно, что Apple не предоставила для этого обратного вызова: / - person yonel; 20.01.2010