Come trovare quale annotazione inviare showDetails?

Come trovare quale annotazione inviare 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 } 

I commenti nel tuo codice hanno la risposta. Anziché utilizzare un metodo personalizzato e chiamare addTarget, utilizzare il metodo di delega calloutAccessoryControlTapped della vista mappa. In questo metodo, otterrete un riferimento alla vista annotazione che contiene un riferimento all’annotazione.

Rimuovi la chiamata ad addTarget e sostituisci il metodo “showDetails” con:

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