2009-10-21 5 views
18

J'utilise un MKMapView contenant un couple de broches MKAnnotation.
Au-dessus de la carte, je montre un UITableView avec des informations détaillées sur les broches MKAnnotation.MKMapView: Obtention d'un événement cliqué sur la broche d'annotation

Mon problème: Lorsque je sélectionne une broche, je voudrais sélectionner la cellule de tableau correspondante. Pour cela, je voudrais attraper un événement/délégué si la broche est sélectionnée. Je ne parle pas d'appeler l'accessoire de légende

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

Répondre

1

Je n'ai pas vu un moyen simple de faire cela dans MapKit. Il n'y a pas de mapView:annotationWasTapped: sur le délégué. Une manière de le faire serait de fournir votre propre sous-classe d'affichage d'annotation. La vue d'annotation personnalisée peut capturer la sélection de broche dans setSelected:animated: ou dans un gestionnaire d'événement de niveau inférieur et transmettre cette information au contrôleur de vue.

+0

Oh, ça sonne bien et semble pas trop de travail! Merci! – squeezer123

+0

C'est comme ça que je le faisais aussi. Étrange que Apple n'a pas fourni de rappel pour cela:/ – yonel

3

vous pouvez utiliser un observateur de certaines personnes à l'événement:

[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

Juste une mise à jour cela - dans iOS 4 il y a des méthodes MKMapViewDelegate qui peuvent être utilisés pour suivre la sélection d'annotation et de-sélection:

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

Si vous voulez savoir si l'utilisateur clique sur une annotation étendue/sélectionnée, vous pouvez vérifier view.selected == YES dans didSelectAnnotationView – nylund

Questions connexes