我在此地图上找到了一个带有MKMapView和大量图钉的应用。

每个引脚都得到rightCalloutAccessoryView。我以这种方式创建它:

UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
pinView.rightCalloutAccessoryView = rightButton;


我怎么知道,哪个针被窃听了? n

最佳答案

showDetails:方法中,您可以从地图视图的selectedAnnotations数组中窃取引脚。即使该属性是NSArray,也要获取数组中的第一项,因为地图视图一次只允许选择一个引脚:

//To be safe, may want to check that array has at least one item first.

id<MKAnnotation> ann = [[mapView selectedAnnotations] objectAtIndex:0];

// OR if you have custom annotation class with other properties...
// (in this case may also want to check class of object first)

YourAnnotationClass *ann = [[mapView selectedAnnotations] objectAtIndex:0];

NSLog(@"ann.title = %@", ann.title);



顺便说一句,您可以使用地图视图的addTarget委托方法,而不必执行calloutAccessoryControlTapped和实现自定义方法。点击的注释可在view参数中找到:

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view
    calloutAccessoryControlTapped:(UIControl *)control
{
    NSLog(@"ann.title = %@", view.annotation.title);
}


如果使用addTarget,请确保从viewForAnnotation中删除​​calloutAccessoryControlTapped

10-08 05:55