2009-10-21 33 views
18

Estoy usando un MKMapView que contiene un par de MKAnnotation pines.
Sobre el mapa estoy mostrando un UITableView con información detallada de los pines MKAnnotation.MKMapView: obtener evento cliqueado en el pin de anotación

Mi problema: Cuando selecciono un pin, me gustaría seleccionar la celda de la tabla correspondiente. Para esto me gustaría atrapar un evento/delegado si se selecciona el pin. No estoy hablando de llamar al accesorio de llamada

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

Respuesta

1

No he visto una manera simple de hacer esto en MapKit. No hay mapView:annotationWasTapped: en el delegado.

Una forma de hacerlo sería proporcionar su propia subclase de vista de anotación. La vista de anotación personalizada podría capturar la selección de pin en setSelected:animated: o en un controlador de eventos de nivel inferior y pasar esa información a su controlador de vista.

+0

Oh, suena bien y no parece ser mucho trabajo! ¡Gracias! – squeezer123

+0

Esta es la forma en que lo estaba haciendo también. Es extraño que Apple no proporcionó ninguna devolución de llamada para eso:/ – yonel

3

puede utilizar un observador seleccionada-Evento:

[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

Apenas una actualización a esto - en iOS 4 hay métodos MKMapViewDelegate que se pueden utilizar para realizar un seguimiento y anotación de la selección de-selección:

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

Si desea saber si el usuario está haciendo clic en una anotación expandida/seleccionada, puede marcar view.selected == YES en didSelectAnnotationView – nylund

Cuestiones relacionadas