2011-07-03 41 views
0

我都试过这样(的MKMapView代表):仅通过子类MKMapView自定义MKAnnotationView?

-(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的外观的任何成功,他们出现作为简单的红色别针没有披露按钮或任何东西....

是改变他们通过创建一个subclassed MKMapView和使用 - (MKAnnotationView *)viewForAnnotation:(ID < MKAnnotation> )注释???我觉得创建一个额外的子类只是为了改变注释是不必要的,为什么上面的方法不工作?

回答

3

您不需要任何子类就可以在MKAnnotationView上设置这些属性。

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

查看this answer的代码示例。

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