2014-10-29 9 views
6

Ich baue eine IOS App, die die eingebaute Kartenansicht verwendet. Ich platziere erfolgreich benutzerdefinierte Annotationen, etc. Ich habe jedoch ein Problem mit der Delegat-Funktion, die aufgerufen wird, wenn eine Annotation gedrückt wird (mapView: didSelectAnnotationView).mapView: didSelectAnnotationView: funktioniert nicht richtig.

Beim ersten Drücken einer Anmerkung wird die Funktion ordnungsgemäß aufgerufen. Wenn ich jedoch erneut auf dieselbe Annotation klicke, wird die Funktion nicht ausgelöst. Wenn ich an dieser Stelle auf eine andere Anmerkung klicke, wird die Funktion ausgelöst, aber wenn ich erneut auf diese Anmerkung klicke, wird die Funktion nicht ausgelöst. Grundsätzlich kann ich niemals zweimal hintereinander auf dieselbe Annotation klicken. Die Delegiertenfunktion wird nur beim ersten Mal aufgerufen. Ist jemand auf dieses Problem gestoßen? Gibt es irgendwo im Speziellen sollte ich nach dem Käfer suchen?

+0

Ich habe das gleiche Problem, aber es gibt einen Unterschied, dh. Ich erhalte ein Problem, wenn die benutzerdefinierte Annotation auf den Rand der Mapview gesetzt wird. –

Antwort

4

Nun, wenn Sie darüber nachdenken, haben Sie diese Anmerkungsansicht bereits ausgewählt. Es macht keinen Sinn, wenn der Delegierte Ihnen sagt, dass der Pin ausgewählt ist, wenn er bereits vorhanden ist.

Eine einfache Lösung könnte darin bestehen, die Annotation im Delegate-Aufruf nicht ausgewählt zu haben. Dies sollte Ihnen ermöglichen, den Anruf erneut zu erhalten.

[annotation setSelected:NO animated:NO]; 

Hier finden Sie die Methode, die Sie aufrufen müssen. https://developer.apple.com/library/ios/documentation/mapkit/reference/MKAnnotationView_Class/index.html#//apple_ref/occ/instm/MKAnnotationView/setSelected:animated:

+0

hat nicht für mich funktioniert –

+0

Was hat nicht für Sie funktioniert? Benutzt du Objective-C noch? Diese Antwort ist sehr alt und könnte in der Zwischenzeit veraltet sein. – Bergasms

5

Freund schlug eine Idee vor und es stellte sich heraus, dass es korrekt war. Wenn didSelectAnnotationView ausgelöst wird, kennzeichnet es die Annotation tatsächlich als ausgewählt. Wenn Sie dann erneut darauf klicken, wird die Delegatfunktion nicht ausgelöst, da sie bereits ausgewählt ist. Sie müssen die Annotation manuell abwählen, indem Sie die folgende Funktion aufrufen, sobald Sie fertig sind, was Sie wollen.

[mapView deselectAnnotation:view.annotation animated:false]; 
1
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)aView 
    { 
     indexPathTag=aView.tag; 
     [mapView deselectAnnotation:aView.annotation animated:YES]; 

    } 
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)aView 
    { 
    } 

Ich hoffe, dies wird für Sie arbeiten :) ich das gleiche Problem konfrontiert, dieser Code für mich gearbeitet.