2010-04-04 4 views

Répondre

2

trouvé la réponse à ma question si vous effectuez les opérations suivantes:

Ce que vous pouvez faire est d'utiliser un observateur à la place donc dans la méthode

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 

vous pouvez ajouter le code comme ceci:

//Add an observer for the selected-property on the MKAnnotationView. Delegate to self. 
    [annotationView addObserver:self 
      forKeyPath:@"selected" 
       options:NSKeyValueObservingOptionNew 
       context:GMAP_ANNOTATION_SELECTED]; 

    annotationView.annotation = annotation; 
    annotationView.canShowCallout = NO; 

puis créer une capture d'observateur qui appellera la méthode pour rendre tout point de vue lorsque l'utilisateur clique sur l'annotation sur l'écran:

- (void)observeValueForKeyPath:(NSString *)keyPath 
         ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context{ 

    NSString *action = (NSString*)context; 


    if([action isEqualToString:GMAP_ANNOTATION_SELECTED]){ 
    BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue]; 
    if (annotationAppeared) { 
     [self showAnnotation:((AssetAnnotationView*) object).annotation]; 
    } 
    else { 
     //NSLog(@"annotation deselected %@", ((AssetAnnotationView*) object).annotation.title); 
     //[self hideAnnotation]; 
    } 
    } 
} 

ont alors votre méthode qui affiche une vue modale ou tout ce que vous voulez:

- (void)showAnnotation:(AssetAnnotationView*)annotation { 

    UINavigationController *aNavController = [[UINavigationController alloc] initWithRootViewController:self.assetInfoViewController]; 
    aNavController.navigationBar.barStyle = UIBarStyleBlack; 

    [self presentModalViewController:aNavController animated:YES]; 
    [aNavController release]; 

} 

Unselect dans viewWillAppear:

NSArray * selected = [localMapView selectedAnnotations]; pour (id annotation dans sélectionné) { [localMapView deselectAnnotation: annotation animée: NO]; }

+1

assurez-vous de désélectionner l'annotaiton dans votre viewDidAppear/viewWillAppear sinon vous rencontrerez le même problème que moi et ne pourrez plus sélectionner l'annotation. – vladzz

+0

Et comment désélectionnez-vous l'annotation? J'essaye ici sans succès. – goo

+0

Pas le moyen le plus efficace de le faire. Mais cette méthode semble fonctionner. NSArray * selected = [localMapView selectedAnnotations]; pour l'annotation (id sélectionnée) { [localMapView deselectAnnotation: annotation animée: NO]; } – vladzz

0

Vous pouvez également utiliser une balise pour chaque annotation que vous créez. Travaille pour moi.

Questions connexes