Также см. «Отображение нескольких аннотаций в MKMapView»:
Отображение нескольких аннотаций в MKMapView
Похоже, что фреймворк не поддерживает множественный выбор, поэтому вам придется реализовать пользовательские выноски для этого поведения. Ответ на связанный вопрос предлагает сделать вашу выноску частью представления аннотации, чтобы вы могли самостоятельно управлять выбором. Лично мне нравится реализовывать выноску как отдельную аннотацию - у меня есть пример проекта с настраиваемыми выносками здесь:
https://github.com/jacobjennings/JJMapCallout
который был моим решением:
MKAnnotationView - заблокировать пользовательский вид аннотации для закрепления обновлений местоположения
В этом проекте я пересылаю методы делегата MKMapView
- (void)mapView:(MKMapView *)aMapView didSelectAnnotationView:(MKAnnotationView *)aView
- (void)mapView:(MKMapView *)aMapView didDeselectAnnotationView:(MKAnnotationView *)aView
к соответствующей аннотации. Это позволяет мне реализовать ожидаемое поведение выноски. Однако вы можете игнорировать сообщения didDeselectAnnotationView, чтобы оставить выноски видимыми.
Чтобы узнать, нажимает ли пользователь на карте, чтобы очистить аннотации (не нажал на булавку), проверьте значение mapView.selectedAnnotations в вашем методе didDeselectAnnotationView, и если он пуст, вы будете знать, чтобы очистить выноски.