我已经尝试了这两个(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;)注释来改变它们的唯一方法吗?我觉得创建一个额外的子类只是为了更改注释是必要的,为什么上述方法不起作用?
答案 0 :(得分:3)
您不需要在MKAnnotationView
上设置这些属性的子类。
您需要实施viewForAnnotation
委托方法并在那里设置属性。
有关代码示例,请参阅this answer。
该示例的唯一变化是使用MKAnnotationView
而不是MKPinAnnotationView
。