Как узнать, какую аннотацию отправлять showDetails?
Как узнать, какую аннотацию отправлять 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 ответ
Комментарии в вашем коде имеют ответ. Вместо использования пользовательского метода и вызова addTarget, используйте метод делегата calloutAccessoryControlTapped представления карты. В этом методе вы получите ссылку на представление аннотации, которое содержит ссылку на аннотацию.
Удалите вызов addTarget и замените ваш метод "showDetails" следующим:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view
calloutAccessoryControlTapped:(UIControl *)control
{
MyAnnotationClass *annot = (MyAnnotationClass *)view.annotation;
//do something...
}