2012-03-24 27 views
3

Ich habe eine App, die eine Mapview hat, und es zeigt 20 Pins (von einem Array) auf der Karte. Wenn der Benutzer darauf klickt, kann eine Blase mit einer rechten Zubehörtaste angezeigt werden. Hier kommt mein Problem: Woher weiß ich, welcher Pin gedrückt wurde? Ich habe etwas über die mapView: didSelectAnnotationView-Methode gehört, aber ich verstehe nicht wirklich, wie Sie den Pin/Callout-Index erhalten, so dass ich die Informationen des Objekts im gleichen Index meines Arrays bekommen kann? Danke für jede Hilfe!Wie speichere ich die ausgewählte MKAnnotation?

Antwort

6

Wenn diese Methode aufgerufen wird - weil Ihre ViewController-Klasse MKMapViewDelegate übernommen hat, können Sie -indexOfObject im Array aufrufen und den Index dieses Pins (Annotation) abrufen. Dies geschieht unter der Annahme, dass Ihr Array Objekte der Art der Annotationsklasse enthält.

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { 
     // Annotation is your custom class that holds information about the annotation 
     if ([view.annotation isKindOfClass:[Annotation class]]) { 
      Annotation *annot = view.annotation; 
      NSInteger index = [self.arrayOfAnnotations indexOfObject:annot]; 
     } 
    } 

Wenn Sie mehr Erklärung benötigen, müssen wir wissen, wie Sie diese Pins hinzufügen, das heißt Umsetzung von - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation.

+0

wow das ist genau was ich brauche! Vielen Dank! – RobRoyRyan

+0

soll es "didDeselectAnnotationView" sein? oder die didselectedAnnotationView? – RobRoyRyan

+0

@RobRoyRyan Es gibt tatsächlich beide, aber ich meinte tatsächlich didSelectAnnotationView. Wenn Sie zuerst eine Anmerkung auswählen, wird didSelectAnnotationView aufgerufen. Wenn eine Anmerkung ausgewählt ist und Sie auf eine beliebige Stelle auf der Karte tippen, wird didDeselectAnnotationView aufgerufen. Wenn eine Anmerkung ausgewählt ist und Sie eine andere auswählen, wird zuerst didDeselectAnnotationView und dann didSelectAnnotationView aufgerufen. – Canopus

0

Hier ist eine ähnliche Lösung für Canopus.

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    if ([view.annotation isKindOfClass:[MyAnnotation class]]) 
    { 
     NSInteger index = [mapView.annotations indexOfObject:view.annotation]; 
     NSLog(@"%d",index); 
    } 

Hinweis: Ich habe der Karte manuell Anmerkungen hinzugefügt und dann ihre jeweiligen Indizes angezeigt. Sie werden nicht in der Reihenfolge indexiert, in der sie der mapView hinzugefügt werden. nur weil Sie eine Annotation als vierte Annotation hinzugefügt haben, könnte sie einen Index von 1 oder 3 oder was auch immer haben. Jemand mag dafür eine Erklärung haben, aber es ist mir bis jetzt entgangen. Hoffe das hilft.

Verwandte Themen