2014-10-29 19 views
6

Sto costruendo un'app IOS che utilizza la visualizzazione mappa integrata. Sto posizionando correttamente annotazioni personalizzate, ecc. Tuttavia, sto avendo un problema con la funzione delegate che viene chiamata quando viene premuta un'annotazione (mapView: didSelectAnnotationView).mapView: didSelectAnnotationView: non funziona correttamente.

La prima volta che premo un'annotazione, la funzione viene richiamata correttamente. Tuttavia, se procedo a fare di nuovo clic sulla stessa annotazione, la funzione non viene attivata. Se faccio clic su un'altra annotazione a questo punto, la funzione si attiva ma, se faccio di nuovo clic su quell'annotazione, la funzione non viene attivata. Fondamentalmente, non posso mai fare clic sulla stessa annotazione due volte di seguito. La funzione delegato verrà chiamata solo la prima volta. Qualcuno ha riscontrato questo problema? C'è un posto in particolare dovrei cercare l'errore?

+0

Ho lo stesso problema, ma c'è una differenza, vale a dire. Sto riscontrando un problema quando la vista annotation personalizzata arriva sul bordo della mappa. –

risposta

4

Beh, quando si pensa a questo proposito, è già stato selezionato che vista annotazione. Non ha senso che il delegato ti dica che il pin è selezionato se lo è già.

Una semplice soluzione potrebbe essere quella di impostare l'annotazione su deselezionata nella chiamata delegata. Questo dovrebbe consentire di ricevere nuovamente la chiamata.

[annotation setSelected:NO animated:NO]; 

Le visite qui per il metodo che è necessario chiamare. https://developer.apple.com/library/ios/documentation/mapkit/reference/MKAnnotationView_Class/index.html#//apple_ref/occ/instm/MKAnnotationView/setSelected:animated:

+0

non ha funzionato per me –

+0

Cosa non ha funzionato per te? Stai ancora usando Objective-C? Questa risposta è molto vecchia, quindi avrebbe potuto essere resa obsoleta nel frattempo. – Bergasms

5

Amico ha suggerito un'idea e si è rivelata corretta. Quando ha fatto scattareSelectAnnotationView, in realtà contrassegna l'annotazione come selezionata in qualche modo. Quindi, quando si fa nuovamente clic, la funzione di delega non viene attivata perché è "già selezionata". Devi deselezionare manualmente l'annotazione richiamando la seguente funzione una volta che hai finito di fare ciò che vuoi.

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

Spero che questo funzionerà per voi :) Ho affrontato lo stesso problema, questo codice ha funzionato per me.

Problemi correlati