您想leftCalloutAccessoryView
为每个注释设置不同的图像。
是的leftCalloutAccessoryView
属性,MKAnnotationView
因此您需要在viewForAnnotation
委托方法中设置它(这是您创建和返回 的地方MKAnnotationView
)。
viewForAnnotation
委托方法获取对您需要在annotation
参数中为其创建视图的注释的引用。
因此,基于 的某些属性annotation
,您可以进行leftCalloutAccessoryView
相应的设置。
在最粗略的水平上,您可以leftCalloutAccessoryView
根据annotation.title
.
例如:如果标题为“SFO”,则将图像设置为“apple”,如果标题为“ATL”,则将图像设置为“peach”,等等。
但是,最好创建一个单独的属性(在实现 的注释类中MKAnnotation
)清楚地指示要用于注释的图像。这个属性可以是它UIImage
本身、图像的名称、一个数字等——任何最适合你的情况。
在创建注解时和调用之前addAnnotation
,您设置注解的这个属性。
然后在viewForAnnotation
委托方法中,leftCalloutAccessoryView
根据自定义注释属性设置。
例如,假设在注解类中添加了一个NSString
名为的属性:imageName
MKAnnotationView *av = ... //or MKPinAnnotationView
//typical dequeue and alloc/init code here
if ([annotation isKindOfClass:[MyAnnotationClass class]])
{
//cast the annotation parameter to your custom class
//so you can easily access the custom properties...
MyAnnotationClass *myAnn = (MyAnnotationClass *)annotation;
//create UIImage based on custom property of annotation...
UIImage *img = [UIImage imageNamed:myAnn.imageName];
//create UIImageView to use for the leftCalloutAccessoryView...
UIImageView *iv = [[[UIImageView alloc] initWithImage:img] autorelease];
//if using ARC, remove the autorelease above
av.leftCalloutAccessoryView = iv;
}
return av;