2014-05-20 9 views
10

Auf meiner iPad App verwende ich iOS-Karte, um einige Punkte mit Annotation anzuzeigen. Ich möchte auch ein benutzerdefiniertes Callout anzeigen, wenn eine Annotation ausgewählt wurde. Ich verwende UIPopoverController, um Callout anzuzeigen. Dies funktioniert jedoch nur, wenn Sie zum ersten Mal auf eine Anmerkung tippen. Wenn ich das Callout in derselben Annotation sehen möchte, muss ich zuerst eine andere Annotation auswählen und dann auf die vorherige Annotation tippen.MKMapView Annotation ist nicht wählbar zum zweiten Mal

Grundsätzlich wird diese Delegiertenmethode nicht zum zweiten Mal ausgelöst.

-(void)mapView:(MKMapView *)mapView 
    didSelectAnnotationView:(MKAnnotationView *)view 

Ich verwende Storyboard und Delegate ist dort festgelegt. So stelle ich die Anmerkungen ein.

[self.mapView addAnnotations:self.placemarksArray] 

Kann mir bitte jemand den Grund für das oben genannte Problem wissen lassen? Dank

+0

Haben Sie versucht, deselectAnnotation an der Spitze des didSelectAnnotationView Methode aufrufen? – Anna

+0

Wow, habe ich nicht. Ich habe getestet und es ist Arbeit. Könnten Sie das bitte als Antwort hinzufügen, dann kann ich die Antwort akzeptieren. Danke für deine Hilfe. – Chinthaka

Antwort

24

Die Dokumentation für die didSelectAnnotationView Delegatmethode sagt dies im Diskussionsabschnitt:

Sie diese Methode verfolgen können ändert im Auswahlzustand Beschriftungsansichten.

(fügte ich die fett und kursiv auf das Wort „Veränderung“.)

dass der Delegatmethode nur feuert Einrichtung, wenn die Zustandsänderungen des Anmerkungsansicht von „nicht gewählt“ auf „ausgewählt“.


Um zu vermeiden, auf einer anderen Anmerkung oder der Karte tippen, die (die den Zustand der ausgewählten Anmerkung zu „nicht ausgewählt“ ändert) und wieder eine „Kopie“ auf der gleichen Anmerkung zu erkennen, können Sie die de erzwingen -Restaurant an der Spitze des didSelectAnnotationView Methode:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    [mapView deselectAnnotation:view.annotation animated:YES]; 

    //existing code to handle tap on annotation... 
} 
1

Swift 3-Version:

mapView.deselectAnnotation(view.annotation, animated: true)