2011-07-25 4 views
0

Je fais mapview. Dans mon application, il y a du code qui obtient la position actuelle de l'utilisateur en latitude et longitude. En utilisant ces coordonnées, je crée une demande de savon. En réponse, je vais obtenir des informations (zip, ville, état, pays, coordonnées) des lieux. J'ai enregistré cette information dans NSDictionary.Comment savoir quelle annotation a été utilisée?

Ceci est le code pour créer une annotation.

MapLocation *annotation = [[MapLocation alloc] initWithCoordinate:location ownerInst:ownerInstitution]; 
    [mapView addAnnotation:annotation]; 
    [annotation release]; 


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

MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"]; 
annView.pinColor = MKPinAnnotationColorGreen; 
annView.animatesDrop=TRUE; 
annView.canShowCallout = YES; 

UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
[infoButton addTarget:self action:@selector(infoButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 
annView.rightCalloutAccessoryView = infoButton; 


annView.calloutOffset = CGPointMake(-5, 5); 
return annView; 
} 

Ceci est la méthode déléguée lorsque l'utilisateur appuie sur le bouton detaildisclosure dans la légende. Sur le robinet de la divulgation de détail, la nouvelle vue sera chargée. Et dans cette nouvelle vue, les informations que j'ai récupérées du serveur seront affichées.

Jusqu'à ce que tout va bien. J'ai plus d'une annotation sur la carte. Mais quand une annotation particulière est tapée, comment vais-je implémenter le code pour montrer l'information (que je reçois du serveur) liée à cette annotation.

J'espère que je suis clair dans l'expression de mon problème. N'hésitez pas à demander plus de détails.

Répondre

0

Le MKAnnotationView *view que vous obtenez de la méthode déléguée contient l'annotation. Vous pouvez stocker toutes les informations dans votre classe MapLocation que vous devez afficher.

MapLocation *annotation = [[MapLocation alloc] initWithCoordinate:location ownerInst:ownerInstitution]; 
[mapView addAnnotation:annotation]; 
[mapView addAdditionalCustomInformation: SomeInfo]; //you need to write your custom methods for that ;) 
[annotation release]; 
+0

Ok. Il y a plus d'une annotation. Comment vais-je mettre en œuvre plus loin pour obtenir des informations correspondant à cette annotation.http: //stackoverflow.com/questions/5583501/assign-dynamic-data-to-detail-view-when-clicking-callout-info-button c'est le lien qui a une même question. J'espère que vous pourrez avoir plus de clarté en regardant cette question également. – Harsh

+0

Oui, je comprends ce que vous voulez mais il semble que ma réponse n'était pas claire. ;) – yinkou

+0

Chaque fois que vous ajoutez une annotation à votre carte, vous pouvez y stocker des informations personnalisées. Je ne sais pas où vous obtenez cela de vous devez gérer cela par vous-même. En étendant votre classe MapLocation avec des méthodes ou des propriétés. Lorsque l'utilisateur appuie sur la commande calloutAccessory, vous pouvez transmettre vos informations de cette annotation particulière à votre nouveau viewController dans la méthode déléguée. – yinkou

Questions connexes