Кнопка выноски MKPinAnnotationView должна передавать пользовательский объект в подробный ViewController - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть класс аннотаций, соответствующий протоколу MKAnnotation. У класса есть метод init, который устанавливает координаты, заголовок и субтитры.

Я создаю массив этих аннотаций и добавляю их в MKMapView обычным способом, используя addAnnotations:annotationArray.

Затем в методе MKMapViewDelegage - (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation Я создаю MKPinAnnotationView с пользовательским цветом пина, animatesDrop, canShowCallout. Выноска имеет UIButton типа UIButtonTypeDetailDisclosure.

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

Я пытаюсь выяснить, как передать данные на страницу сведений ([self.navigationController pushViewController:detailsController animated:YES];), когда пользователь нажимает кнопку раскрытия сведений. Я попытался изменить свой класс аннотаций, добавив дополнительный параметр в метод init, однако я не могу получить доступ к этому параметру в методе - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control. Кажется, я могу получить доступ только к заголовку и субтитру, выполнив что-то вроде [view.annotation title]

Я не уверен, что здесь делать, похоже, я не могу найти никакой документации о том, как это сделать ...

Снова. Я хочу передать объект в контроллер детального вида. Объект будет содержать различные данные, которые будут использоваться на странице сведений ...

PS - я использую Xcode 4.2 с ARC.

1 Ответ

3 голосов
/ 26 февраля 2012

В calloutAccessoryControlTapped ссылка на аннотацию - это точный объект аннотации, который вы создали и добавили, но ссылка набирается как id<MKAnnotation>.

Чтобы получить доступ к пользовательским свойствам в вашем классе аннотаций, вы можетесначала приведите его:

YourAnnotationClass *myAnn = (YourAnnotationClass *)view.annotation;

//now you can explicitly reference your custom properties...
NSLog(@"myAnn.customProp = %@", myAnn.customProp);

Убедитесь, что «customProp» определено как свойство в вашем классе аннотаций.

...