2012-03-26 6 views
4

Meine iPhone-App verfügt über eine Kartenansicht mit einer großen Anzahl von Standorten, aus denen der Benutzer auswählen kann. Ich möchte, dass er auf eine der Anmerkungen tippen kann, um seine Callout-Ansicht anzuzeigen, und dann erneut, um sie tatsächlich auszuwählen. Das Problem ist, dass die didSelectAnnotationView nur einmal aufgerufen wird.Auswählen einer MapView-Annotation Twice

Wie kann ich die Auswahl einer bereits ausgewählten Anmerkung erkennen? Alternativ, wie kann ich eine Anmerkung abwählen, ohne die Callout-Ansicht zu verbergen? Der Benutzer kann dies umgehen, indem er die Annotation aufhebt, bevor er sie erneut auswählt, aber das ist nicht intuitiv, und ich möchte vermeiden, dass er dies tut.

+0

Wenn Sie eine Unterklasse von MKAnnotationView verwenden, können Sie nicht die zweite Presse auf dieser Ansicht in Ihrem eigenen Code erkennen? (statt auf der 'Pin') – Diziet

+0

Ich bin derzeit nicht MKAnnotationView Unterklasse, obwohl ich denke, ich könnte. Aber ich bin überrascht, dass es dafür keine einfache Lösung zu geben scheint. –

+0

Ich hatte gerade eine Geige herum und ich sehe, was Sie jetzt genauer verstehen. Ich klicke auf die Annotation und sie verschwindet, also keine Chance für einen zweiten Klick, ohne den relevanten Pin trotzdem erneut auszuwählen. – Diziet

Antwort

0

Die Anmerkung kann nicht vom ausgewählten Status in den ausgewählten Zustand zurückkehren.

Sie können stattdessen eine benutzerdefinierte mkannotation-Ansicht verwenden, in der Sie setSelected überschreiben und einen UITapGestureRdcognizer in Ihrer Ansicht installieren und ihn entfernen, wenn die Ansicht deaktiviert ist.

verdrahten Sie die erkannten zu tun, was Sie für den Tap-wenn-ausgewählten Zustand wollen.

7

Ich habe gerade die Lösung mit dem folgenden Code:

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

} 

diese Weise wird die ausgewählte Anmerkung abgewählt wird, und Sie können es erneut wählen.

3

Für diejenigen, die dieses Problem in '16 haben, hier ist die Swift-Version:

mapView.deselectAnnotation(view.annotation!, animated: false)