Acessando a propriedade "selecionada" do MKANNOTATIONSVIEL Custom?
-
22-09-2019 - |
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?
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]];