Аннотация детали после раскрытия детали нажата? - PullRequest
2 голосов
/ 26 марта 2012

У меня есть объект аннотации MKMapView, который имеет правую кнопку раскрытия сведений о дополнительных аксессуарах. Когда кнопка нажата, я использую addTarget: action: forControlEvent для вызова метода селектора, который создает подробный viewController и помещает его в стек представлений.

Мой вопрос заключается в том, как лучше всего получить доступ к информации в аннотации, которая инициировала контроллер детализации выноски. Кнопка раскрытия подробностей установлена ​​для вызова:

[button addTarget:self action:@selector(disclosurePressed:) forControlEvents:UIControlEventTouchUpInside];

Что выглядит так:

- (void)disclosurePressed:(id)sender {
}

Полагаю, я мог бы найти родительскую аннотацию отправителя UIButton, может кто-нибудь дать мне какие-нибудь указания на то, как это лучше всего сделать.

Ответы [ 2 ]

4 голосов
/ 26 марта 2012

Возможно, вам будет проще использовать метод MKMapViewDelegate mapView:annotationView:calloutAccessoryControlTapped:, который напрямую сообщит вам, какой вид аннотации был использован.

3 голосов
/ 26 марта 2012

Надежный способ (если вы должны использовать пользовательский метод) - посмотреть на свойство 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...