2010-11-11 16 views
1

Je peux obtenir une carte à afficher et une broche à déposer où je veux dans mon projet d'application iphone, mais je veux que le titre et le sous-titre apparaissent lorsque la vue charges. Voici le code que j'utilise. J'ai pensé mettre [mapView selectAnnotation: annotation animée: YES];Obtenir le titre à afficher lorsque la carte se charge avec mkmap

fonctionnerait, mais ce n'est pas le cas. Est-ce que quelqu'un sait comment faire ça?

Merci

CLLocationCoordinate2D coord = {latitude: 32,02008, longitude: -108,479707};

[self.view addSubview:mapView]; 


MapController *annotation = [[MapController alloc] initWithCoordinate:coord]; 
annotation.currentPoint = [NSNumber numberWithInt:1]; 
annotation.mTitle = @"MyTitle"; 
annotation.mSubTitle = @"My Address"; 
[mapView selectAnnotation:annotation animated:YES]; 
[mapView addAnnotation:annotation]; 
[annotation release]; 

Répondre

3

Appel selectAnnotation avant qu'il ne soit ajouté à la carte ne fonctionnera pas et même le mettre après la ligne de AddAnnotation ne fonctionnera pas parce que la vue d'annotation n'a pas été établie sur la carte encore.

Vous aurez besoin d'utiliser la méthode déléguée didAddAnnotationViews qui est appelée lorsque les annotations sont prêts à manipuler:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
{ 
    id<MKAnnotation> myAnnotation = [mapView.annotations objectAtIndex:0]; 
    [mapView selectAnnotation:myAnnotation animated:YES]; 
} 

L'exemple suppose que vous avez juste une annotation et il obtient de la série d'annotations du Mapview. Vous pouvez également conserver une référence à votre annotation avec un ivar.

Assurez-vous que vous avez défini la propriété delegate de mapView, sinon la méthode ne sera pas appelée.

+0

Merci ... J'obtiens cette erreur "déclaration locale de mapView cache la variable d'instance" une idée de ce à quoi cela fait référence? Encore une fois, j'apprécie vraiment votre aide à ce sujet. –

+0

Cela ne va pas vraiment l'empêcher de fonctionner - il vous avertit simplement d'un conflit de noms/confusion possibles. Vous pouvez remplacer le nom du paramètre mapView de la méthode par un autre pour que l'avertissement disparaisse. – Anna

+0

Ou - probablement une meilleure option est de changer le nom de votre variable de classe mapView de mapView à quelque chose comme myMapView parce que toutes les méthodes déléguées de la vue de carte utilisent par défaut "mapView". – Anna