Also see "Displaying Multiple Annotations in MKMapView": Displaying Multiple Annotations in MKMapView
It seems that the framework does not support multiple selections, so you will have to implement custom callouts for this behavior. The answer to a related question suggests making your callout part of your annotation view so that you can manage your choices yourself. Personally, I like to implement callout as a separate annotation - I have an example project with custom callouts here:
https://github.com/jacobjennings/JJMapCallout
which was my solution:
MKAnnotationView - block user annotation view for binding to location updates
In this project, I am sending MKMapView delegation methods
- (void)mapView:(MKMapView *)aMapView didSelectAnnotationView:(MKAnnotationView *)aView - (void)mapView:(MKMapView *)aMapView didDeselectAnnotationView:(MKAnnotationView *)aView
to the corresponding annotation. This allows me to implement the expected callout behavior. However, you can ignore didDeselectAnnotationView messages to display them.
To find out if the user is deleting on the map in order to clear annotations (do not click on a contact), check the value of mapView.selectedAnnotations in your didDeselectAnnotationView method, and if it is empty, you will know to clear the callouts.
source share