2009-10-21 2 views
18

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

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

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

ответ

1

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

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

+0

О, звучит хорошо и, кажется, не много работает! Спасибо! – squeezer123

+0

Так я и делал это. Странно, что Apple не предоставила никакого обратного вызова для этого:/ – yonel

3

вы можете использовать Observer для Selected-Event:

[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 
     } 
    } 
} 
42

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

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view 
+4

Если вы хотите узнать, нажимает ли пользователь на расширенную/выделенную аннотацию, вы можете проверить view.selected == YES в didSelectAnnotationView – nylund