Acceso a la propiedad “seleccionado” de MKAnnotationView personalizada?
-
22-09-2019 - |
Pregunta
Estoy tratando de utilizar la propiedad "seleccionado" en MKAnnotationView (discutido aquí ), esto es para que el usuario sea capaz de eliminar una anotación ...
El siguiente fragmento de código debe encontrar el punto seleccionado en MKMapView y eliminarlo:
CSMapAnnotation *a;
for(a in [mapView annotations])
{
if([a selected]) //Warning: 'CSMapAnnotation' may not respond to '-selected'
{
[mapView removeAnnotation:a];
}
}
¿Dónde es mi encargo CSMapAnnotation Mapa de anotación define así:
#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;
Creo que porque no soy realmente "heredar" de MKAnnotationView
, CSMapAnnotation
no responderá a selected
.
¿Cuál sería la mejor manera de solucionar este problema ??
Solución
Tiene usted razón en su suposición; CSMapAnnotation ya no hereda de MKAnnotationView, y no se ha implementado la propiedad seleccionada, no va a funcionar.
Además, están manejando la relación CSMapAnnotation a MKAnnotationView para mapear la vista de anotación (el perno) a los datos almacenados en CSMapAnnotation? Recuerde que el MKAnnotationView tiene la propiedad seleccionada, no el MKAnnotation.
Si está administrando anotación a la vista de asignación correctamente, esto debería funcionar para usted:
CSMapAnnotation *a;
for(a in [mapView selectedAnnotations])
{
//You may want a type-check here
[mapView removeAnnotation:a];
}
O incluso:
[mapView removeAnnotations:[mapView selectedAnnotations]];