2014-10-29 20 views
6

Buduję aplikację IOS, która korzysta z wbudowanego widoku mapy. Z powodzeniem umieszczam niestandardowe adnotacje itp. Jednak mam problem z funkcją delegata, która jest wywoływana po naciśnięciu adnotacji (mapView: didSelectAnnotationView).mapView: didSelectAnnotationView: nie działa poprawnie.

Po pierwszym naciśnięciu adnotacji funkcja jest wywoływana prawidłowo. Jeśli jednak ponownie kliknę tę samą adnotację, funkcja nie uruchomi się. Jeśli kliknę na inną adnotację w tym miejscu, funkcja BĘDZIE wyzwalać, ale jeśli kliknę ponownie na tę adnotację, funkcja nie uruchomi się. Zasadniczo nigdy nie mogę kliknąć tej samej adnotacji dwa razy z rzędu. Funkcja delegata zostanie wywołana tylko za pierwszym razem. Czy ktoś napotkał ten problem? Czy jest gdzieś w szczególności powinienem szukać błędu?

+0

Mam ten sam problem, ale jest jedna różnica, tj. Występuje problem, gdy niestandardowy widok adnotacji pojawia się na granicy widoku mapy. –

Odpowiedz

4

Cóż, kiedy o tym pomyślisz, wybrałeś już ten widok adnotacji. Delegat nie ma sensu, aby powiedzieć, że pin jest zaznaczony, jeśli już jest.

Prostą poprawką może być ustawienie adnotacji, aby nie była zaznaczona w wywołaniu delegata. Powinno to umożliwić ponowne odebranie połączenia.

Tutaj znajdziesz metodę, z którą chcesz się połączyć. https://developer.apple.com/library/ios/documentation/mapkit/reference/MKAnnotationView_Class/index.html#//apple_ref/occ/instm/MKAnnotationView/setSelected:animated:

+0

nie działa dla mnie –

+0

Co nie działa dla Ciebie? Czy nadal używasz Objective-C? Ta odpowiedź jest bardzo stara, więc mogła być przestarzała w międzyczasie. – Bergasms

5

Przyjaciel zasugerował pomysł i okazało się to poprawne. Po uruchomieniu komendy didSelectAnnotationView faktycznie oznacza on adnotację jako wybraną. Następnie, po ponownym kliknięciu, funkcja delegata nie uruchamia się, ponieważ jest "już wybrana". Musisz ręcznie odznaczyć adnotację, wywołując następującą funkcję, gdy skończysz robić to, co chcesz.

[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 
    { 
    } 

Mam nadzieję, że będzie pracować dla Ciebie :) Mam wobec tego samego problemu, kod ten pracował dla mnie.

Powiązane problemy