Pergunta

Estou tentando usar a propriedade "selecionada" em MkannotationView (discutido aqui ), isso é para o usuário poder excluir uma anotação selecionada ...

A seguinte parte do código deve encontrar o pino selecionado no mkmapview e removê -lo:

CSMapAnnotation *a;

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

Onde o CSMAPANONOTAÇÃO é minha anotação de mapa personalizada definida assim:

#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;

Eu acho que porque eu realmente não estou "herdando" de MKAnnotationView, CSMapAnnotation não responderá a selected.

Qual seria a melhor maneira de corrigir esse problema?

Foi útil?

Solução

Você está certo em sua suposição; Como o CSmapannotation não herda do MkannoTationView e você não implementou a propriedade selecionada, ela não funcionará.

Além disso, você está gerenciando a relação csmapannotation to mkannotationview para mapear a visualização de anotação (o pino) para os dados armazenados na CSMAPANONOTAÇÃO? Lembre -se de que o MkannotationView possui a propriedade selecionada, não a Mkannotation.

Se você está gerenciando a anotação para visualizar o mapeamento corretamente, isso deve funcionar para você:

CSMapAnnotation *a; 

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

Ou até:

[mapView removeAnnotations:[mapView selectedAnnotations]];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top