Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can the MKUserLocation be programmatically selected?

Titles and subtitles can be added to the user location that iOS shows using MKUserLocation. When the user taps on the location, these will show in a bubble above the location. The thought bubbles for other annotations can be shown by selecting the annotation with setSelected:animated: from MKAnnotationView. Unfortunately, MKUserLocation does not descend from MKAnnotationView.

How can I programmatically select the user location so the annotation appears over the user location without the user first tapping on it?

like image 677
Mike Avatar asked Jan 20 '26 22:01

Mike


1 Answers

The documentation for MKAnnotationView says this about its setSelected:animated: method (and something similar for its selected property):

You should not call this method directly.


Instead, use the MKMapView method selectAnnotation:animated:. If you call it in the didAddAnnotationViews delegate method, you can be sure the annotation view is ready to show the callout otherwise calling selectAnnotation will do nothing.

For example:

-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    for (MKAnnotationView *av in views)
    {
        if ([av.annotation isKindOfClass:[MKUserLocation class]])
        {
            [mapView selectAnnotation:av.annotation animated:NO];
            //Setting animated to YES for the user location 
            //gives strange results so setting it to NO.
            return;
        }
    }
}

Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!