ViewForAnnotation n'est pas appelé
Je suis en train de faire une carte, où je peux voir ma position actuelle, et de voir ce que la rue est appelée.
jusqu'à présent, je suis capable de mettre un code pin sur ma carte, mais pour une raison quelconque, je n'obtiens pas de la légende.
et j'ai mis un NSLog dans mon viewForAnnotation méthode, mais il n'est pas appelé, donc je n'ai pas pu le tester.
quelqu'un peut m'aider?
-(void)lat:(float)lat lon:(float)lon
{
CLLocationCoordinate2D location;
location.latitude = lat;
location.longitude = lon;
NSLog(@"Latitude: %f, Longitude: %f",location.latitude, location.longitude);
//One location is obtained.. just zoom to that location
MKCoordinateRegion region;
region.center=location;
//Set Zoom level using Span
MKCoordinateSpan span;
span.latitudeDelta=.005f;
span.longitudeDelta=.005f;
region.span=span;
[map setRegion:region animated:TRUE];
//MKReverseGeocoder *geocoder=[[MKReverseGeocoder alloc] initWithCoordinate:location];
//geocoder.delegate=self;
//[geocoder start];
if (cPlacemark != nil) {
[map removeAnnotation:cPlacemark];
}
cPlacemark=[[CustomPlacemark alloc] initWithCoordinate:location];
cPlacemark.title = mPlacemark.thoroughfare;
cPlacemark.subtitle = mPlacemark.locality;
[map addAnnotation:cPlacemark];
[cPlacemark release];
[mLocationManager stopUpdatingLocation];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
//try to dequeue an existing pin view first
if ([annotation isKindOfClass:[CustomPlacemark class]]){
MKPinAnnotationView *pinView=(MKPinAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:@"customIdentifier"];
if (!pinView)
{
//if an existing pin view was not available, create one
MKPinAnnotationView* cPinAnnoView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:@"customIdentifier"] autorelease];
cPinAnnoView.pinColor = MKPinAnnotationColorPurple;
cPinAnnoView.animatesDrop = YES;
cPinAnnoView.canShowCallout = YES;
//Add button
UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[leftButton addTarget:self action:@selector(annotationViewClick:) forControlEvents:UIControlEventTouchUpInside];
cPinAnnoView.leftCalloutAccessoryView = leftButton;
} else
{
pinView.annotation = annotation;
}
return pinView;
}
return nil;
}
Droit maintenant, j'ai personnalisé mon viewForAnnotation à être comme ça.
Mais je ne peux toujours pas une légende de mon code pin et le code pin reste rouge.
Mais il convient de pourpre de rien du tout
- Si votre carte est chargé à partir d'une plume, ne vous souvenez-vous de fil jusqu'? Avez-vous souvenez-vous de définir le délégué?
- mon délégué est "câblé" pour ma barre de recherche et searchdisplaycontroller ça fonctionne maintenant:P merci, j'ai encore besoin de comprendre pourquoi je ne suis pas une légende bien
- Vous pouvez poster votre
CustomPlacemark
classe? Je ne vois pas pourquoi cela ne marcherait pas... - J'ai déjà trouvé la réponse, je n'ai pas mis le délégué à ma mapview
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème ce qui n'était pas le réglage de la MapView délégué pour le Propriétaire du Fichier.
J'ai eu le même problème, comme vous l'avez mentionné. Le délégué avait été fixé ViewController, mais le
viewForAnnotation
sélecteur n'a pas été appelé. Après quelques vérifications, j'ai réalisé que si vous n'appelez pasaddAnotation
dans le thread principal, mapView ne dirais pasviewForAnnotation
, suite à la mise à jour a résolu mon problème:Avant:
Après:
Afin d'obtenir le
viewForAnnotation
d'être appelé, ajoutermapView.delegate=self;
, par exemple, auxviewDidLoad
méthode:Pourrait-il que votre annotation a été ajouté à l'extérieur de la zone d'affichage de la MKMapView?
Pour storyboard, Ctl faites glisser le MKMapView le cercle orange sur la barre du bas de ViewController, et sélectionnez délégué.
Cela va résoudre le problème.
D'autres l'ont déjà expliqué, les chances sont élevées que vous n'avez pas connecté votre mapview délégué à votre contrôleur. C'est la première chose à vérifier
Comme vatrif mentionné dans les commentaires, vous devez définir votre délégué AVANT de l'ajout d'annotations à votre MKMapView objet.
j'ai travaillé dans ios 9 Mapview liées app et j'ai eu le même problème.
en quelque sorte, j'ai résolu mon problème, dans mon cas, im le redimensionnement de la
mapview
.J'ai ajouté
delegate
après je redimensionner lamapview
. il fonctionne maintenant parfaitement.!Après avoir mis le délégué pour la mapview si encore le viewforannotation pas appelé alors c'est quelque chose qui vous ont manqué - jeu de l'auto.mapView.showsUserLocation OUI, dans interface builder, vous pouvez cocher la montre userLocation option dans les attributs de l'inspecteur.