2012-06-29 4 views
6

Ma tâche consiste à désélectionner une annotation de carte à la deuxième pression.Comment désélectionner une annotation de carte à la deuxième pression

Je n'ai pas trouvé comment le faire avec les fonctions mapView. Donc, j'ai utilisé un article de stackoverflow et faire comme ceci:

- (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]; 
    } 
} 

Il semble fonctionne correctement, mais ce n'est pas. Lorsque je tape sur l'annotation, la deuxième fois, la légende disparaît et réapparaît.

Des idées?

Merci d'avance.

Répondre

18

J'ai trouvé la solution. Peut-être que ce n'est pas bon.

J'ai ajouté booléen "est spectacle", comme mentionné plus haut. Donc, mes fonctions ressemblent à ce qui suit:

- (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; 
} 

Peut-être que ce sera utile pour quelqu'un :).

Merci.

1

Peut-être que vous devriez ajouter un booléen "est visible" et agir en conséquence. Parce qu'il semble que votre geste est appelé, puis "fait Select" est appelé à nouveau.

+0

Mais où ai-je ajouté ceci? J'ai pensé à ça. Mais comment puis-je interdire l'affichage de la légende sur le clic? Merci. – Igor

Questions connexes