2

我正在尝试使用 MKAnnotationView 中的“selected”属性(在此处讨论),这是为了让用户能够删除选定的注释......

以下代码应该在 MKMapView 中找到选定的引脚并将其删除:

CSMapAnnotation *a;

for(a in [mapView annotations])
{
    if([a selected]) //Warning: 'CSMapAnnotation' may not respond to '-selected'
    {
        [mapView removeAnnotation:a];
    }
}

其中 CSMapAnnotation 是我的自定义地图注释,定义如下:

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

// types of annotations for which we will provide annotation views. 
typedef enum {
    kCMapAnnotationTypeStart        = 0,
    kCMapAnnotationTypeCheckpoint   = 1,
    kCMapAnnotationTypeEnd          = 2
} CSMapAnnotationType;

@interface CSMapAnnotation : NSObject <MKAnnotation>
{
    CLLocationCoordinate2D coordinate;
    CSMapAnnotationType    annotationType;
    NSString*              title;
    NSString*              userData;
}

-(id) initWithCoordinate:(CLLocationCoordinate2D)inCoordinate 
          annotationType:(CSMapAnnotationType) annotationType
                   title:(NSString*)title;

- (BOOL) isEqualToAnnotation:(CSMapAnnotation *) anAnnotation;

@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;
@property (nonatomic, readwrite) CSMapAnnotationType    annotationType;
@property (nonatomic, retain) NSString* title;
@property (nonatomic, retain) NSString* userData;

我认为因为我不是真正“继承”自MKAnnotationViewCSMapAnnotation所以不会回应selected

解决此问题的最佳方法是什么?

4

1 回答 1

1

你的假设是对的;由于 CSMapAnnotation 不是从 MKAnnotationView 继承的,并且您还没有实现 selected 属性,因此它将不起作用。

此外,您是否管理 CSMapAnnotation 与 MKAnnotationView 的关系以将注释视图(引脚)映射到存储在 CSMapAnnotation 中的数据?请记住,MKAnnotationView 具有 selected 属性,而不是 MKAnnotation。

如果您正在管理注释以正确查看映射,这应该适合您:

CSMapAnnotation *a; 

for(a in [mapView selectedAnnotations])
{
    //You may want a type-check here
    [mapView removeAnnotation:a];
}

甚至:

[mapView removeAnnotations:[mapView selectedAnnotations]];
于 2010-02-24T21:36:24.290 回答