如何显示实现MkAnnotation协议的对象的调用?

时间:2012-03-11 03:00:38

标签: iphone mapkit callout

我有一个实现MKAnnotation协议的对象:

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface VoiceMemoryAnnotation : NSObject <MKAnnotation> {
    NSString * blobkey;
}
@property (nonatomic, retain) NSString * blobkey;

-(id)initWithBlobkey:(NSString *) key andCoordinate:(CLLocationCoordinate2D) c;
@end

添加此对象时,地图可以正常工作,因为我可以看到红色引脚被丢弃。但是,当我想将此对象设置为显示标注时,就会出现问题。

我无法执行annotation.showCallOut = YES,因为“MkAnnotation”没有此属性,但是MkAnnotationView没有。我该如何解决这个问题?

我尝试实现地图回调“viewForAnnotation”以检查“VoiceMemoryAnnotation”,我尝试返回一个新的“MkAnnotationView”并设置它的callout = YES,但是当我这样做时,我开始出现分段错误。

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:2)

首先,您需要创建注释对象(实现MKAnnotation协议的对象)并使用类似

的内容将其添加到地图中
VoiceMemoryAnnotation*VMA = [[VoiceMemoryAnnotation alloc] init];
VMA.title = @"Title String";
VMA.subtitle = @"Subtitle String";

[self.mapView addAnnotation:VMA];

这将自动调用您需要实现的以下方法:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
 {
     MKPinAnnotationView*singleAnnotationView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:nil];
     singleAnnotationView.canShowCallout = YES;

     return singleAnnotationView;
 }

在这个实现中MKAnnotationView不起作用,它需要是MKPinAnnotationView。

答案 1 :(得分:0)

我不确定我是否完全理解你的问题,但我想知道,MKMapViews - (void)selectAnnotation:(id <MKAnnotation>)annotation animated:(BOOL)animated你在寻找什么?