0

我已经尝试了这两个(MKMapView Delegate):

-(void) mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    for (MKAnnotationView *annotationView in views)
    {
        annotationView.image = [UIImage imageNamed:@"itemType2.png"];
        annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        annotationView.canShowCallout = YES;
    }        
}

这(在具有 MKMapView 的 VC 上):

[self.theMapView addAnnotations:annotationsArray];

for (id <MKAnnotation> itemAnnotation in self.theMapView.annotations)
{        
    MKAnnotationView *itemAnnotationView = [self.theMapView viewForAnnotation:itemAnnotation];

    itemAnnotationView.image = [UIImage imageNamed:@"itemType2.png"];
    itemAnnotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    itemAnnotationView.canShowCallout = YES;

    //[self.theMapView setNeedsDisplay];
}

在更改 MKAnnotationView 的外观方面没有任何成功,它们显示为简单的红色大头针,没有披露按钮或任何东西......

是通过创建子类 MKMapView 并使用 - (MKAnnotationView *)viewForAnnotation:(id < MKAnnotation >)annotation 来更改它们的唯一方法吗?我觉得为了更改注释而创建一个额外的子类是没有必要的,为什么上述方法不起作用?

4

1 回答 1

3

您不需要子类化任何东西来在MKAnnotationView.

您需要实现viewForAnnotation 委托方法并在那里设置属性。

有关代码示例,请参见此答案

该示例的唯一变化是使用MKAnnotationView而不是MKPinAnnotationView.

于 2011-07-03T18:53:01.923 回答