I want to show a custom message instead of \"My Location\" in viewForAnnotation. How do I do this?
Thanks Deshawn
In the delegate of your MKMapView
, implement the method mapView:viewForAnnotation
and check if the annotation is of type MKUserLocation
. If yes, change the title and subtitle properties of the annotation. The callout will automatically pull the new values. Or you can create a totally new view and return it here.
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]]) {
annotation.title = @"I am here";
return nil;
}
return nil;
}
Disclaimer: I haven't tested this code.
It can be done by updating Title
property of MKUserLocation
.
As MKAnnotation
protocol doesn't require making Title
a property, cast annotation passed as an argument to MKUserLocation
and set the property
- (MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation: (id<MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]]) {
[(MKUserLocation*)annotation setTitle: @"I am here"];
return nil;
}
return nil;
}
Simply referring directly to it works too, like this...
mapView.userLocation.title = @"I am here";
This can be done from anywhere you have a reference to the map view.