2012-06-29 14 views
6

Il mio compito è deselezionare un'annotazione della mappa al secondo tocco.Come deselezionare un'annotazione della mappa al secondo tocco

Non ho trovato come farlo con le funzioni mapView. Così ho usato un articolo da StackOverflow e fare così:

- (void)viewDidLoad 
{ 
    annotationTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(annotationTapRecognized:)]; 
    annotationTap.numberOfTapsRequired = 1; 
    annotationTap.delegate = self; 
} 

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    [view addGestureRecognizer:annotationTap]; 
} 

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view 
{ 
    [view removeGestureRecognizer:annotationTap]; 
} 

- (void)annotationTapRecognized:(UIGestureRecognizer *)gesture 
{ 
    NSArray *selectedAnnotations = self.viewMap.selectedAnnotations; 
    for (MapAnnotation *annotationView in selectedAnnotations) { 
     [self.viewMap deselectAnnotation:annotationView animated:NO]; 
    } 
} 

Sembra opere corretto, ma non lo è. Quando tocco l'annotazione, il callout di seconda volta scompare e appare di nuovo.

Qualche idea?

Grazie in anticipo.

risposta

18

Ho trovato la soluzione. Forse non va bene.

Ho aggiunto booleano "is show", come menzionato in luxsypher. Quindi le mie funzioni assomigliano alle seguenti:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    [view addGestureRecognizer:annotationTap]; 

    if (isShow) { 
     NSArray *selectedAnnotations = self.viewMap.selectedAnnotations; 
     for (MapAnnotation *annotationView in selectedAnnotations) { 
      [self.viewMap deselectAnnotation:annotationView animated:YES]; 
     } 
     isShow = FALSE; 
    } 
} 

- (void)annotationTapRecognized:(UIGestureRecognizer *)gesture 
{ 
    NSArray *selectedAnnotations = self.viewMap.selectedAnnotations; 
    for (MapAnnotation *annotationView in selectedAnnotations) { 
     [self.viewMap deselectAnnotation:annotationView animated:YES]; 
    } 
    isShow = TRUE; 
} 

Forse sarà utile per qualcuno :).

Grazie.

1

Forse dovresti aggiungere un booleano "è visibile" e agire di conseguenza. Perché sembra che il tuo gesto venga chiamato e poi "Select" è stato chiamato di nuovo.

+0

Ma dove ho aggiunto questo? Ci ho pensato. Ma come posso proibire di visualizzare il callout al clic? Grazie. – Igor

Problemi correlati