Как узнать, какую аннотацию отправлять showDetails? - PullRequest
1 голос
/ 30 декабря 2010

Как узнать, какую аннотацию отправлять showDetails?

MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc]
                                             initWithAnnotation:annotation reuseIdentifier:BridgeAnnotationIdentifier] autorelease];
            customPinView.pinColor = MKPinAnnotationColorPurple;
            customPinView.animatesDrop = YES;
            customPinView.canShowCallout = YES;

            // add a detail disclosure button to the callout which will open a new view controller page
            //
            // note: you can assign a specific call out accessory view, or as MKMapViewDelegate you can implement:
            //  - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control;
            //
            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            [rightButton addTarget:self
                            action:@selector(showDetails:)
                  forControlEvents:UIControlEventTouchUpInside];
            customPinView.rightCalloutAccessoryView = rightButton;

            return customPinView;

- (void)showDetails:(id)sender
{
  some code
}

1 Ответ

8 голосов
/ 30 декабря 2010

Комментарии в вашем коде имеют ответ. Вместо использования пользовательского метода и вызова addTarget используйте метод делегата calloutAccessoryControlTapped представления карты. В этом методе вы получите ссылку на представление аннотации, которое содержит ссылку на аннотацию.

Удалите вызов addTarget и замените ваш метод "showDetails" на:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
    calloutAccessoryControlTapped:(UIControl *)control
{
    MyAnnotationClass *annot = (MyAnnotationClass *)view.annotation;
    //do something...
}
...