仅通过子类化的MKMapView自定义MKAnnotationView?

时间:2011-07-03 18:36:49

标签: ios mkmapview mkannotation mkannotationview

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

-(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&lt; MKAnnotation&gt;)注释来改变它们的唯一方法吗?我觉得创建一个额外的子类只是为了更改注释是必要的,为什么上述方法不起作用?

1 个答案:

答案 0 :(得分:3)

您不需要在MKAnnotationView上设置这些属性的子类。

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

有关代码示例,请参阅this answer

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