Подтвердить что ты не робот

MKMapView: получить событие clicked на значке аннотации

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

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

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

Ответ 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: или в обработчике событий нижнего уровня и передавать эту информацию до вашего контроллера вида.