Надежный способ (если вы должны использовать пользовательский метод) - посмотреть на свойство selectedAnnotations
представления карты.
Хотя это свойство NSArray
, так как представление карты допускает только одну аннотациючтобы быть выбранным одновременно, тот, который пользователь только что нажал, будет иметь индекс 0, поэтому он будет:
id<MKAnnotation> annTapped = [mapView.selectedAnnotations objectAtIndex:0];
//Here, you can cast annTapped to a custom annotation class if needed.
//Be sure to check what kind of class it is first.
Вы также можете сначала проверить, что mapView.selectedAnnotations.count
не равно нулю, просто чтобы бытьsafe.
Однако лучший способ (как уже ответил Неван Кинг), чем использовать addTarget
и метод настраиваемого действия, - это использовать метод делегата calloutAccessoryControlTapped
представления карты, где аннотация доступна напрямую.через параметр view
, используя:
id<MKAnnotation> annTapped = view.annotation;