acción MapView anotación de llamada cuando se abre

votos
0

Tengo un MapView con varias anotaciones. Cada anotación tiene un leftCalloutAccessoryView que es una clase UIViewController. La razón de esto es que quiero que cada anotación a cargar algunos datos del servidor y añada el resultado de que los datos de los subtítulos anotación. Todo esto funciona perfectamente, excepto que no quiero cargar todos esos datos cuando se inicia mi aplicación, pero yo quiero a la llamada remota a hacerse sólo cuando se abre la burbuja del reclamo.

¿Alguien sabe cómo puedo hacer esto? El viewWillload, viewDidLoad ect. no funcionan en este caso. Cualquier ejemplo así?

Publicado el 12/04/2010 a las 13:21
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
2

He resuelto el problema al añadir un observador. El observador entonces hace su cosa y después de que la llamada se muestra.

Algo que tenía problemas con es que no he podido actualizar la información en la burbuja de llamada después de que se muestra la burbuja. La única manera de hacer esto es crear su propia burbuja de llamada (como yo lo entiendo), que es algo que no me siento como teniendo en cuenta que tengo una fecha límite. Me fijo que mediante la adición de un UIView adicional con un alfa en él y un texto "Obtención de datos de localización ...". Me acaba de aparecer ese punto de vista cuando se pulsa un lugar y cuando se realiza el observador, me oculto (por supuesto mediante el uso de una animación) de nuevo la vista.

Espero que mi respuesta ha ayudado a otros.

Código:

[pin addObserver:self
      forKeyPath:@"selected"
         options:NSKeyValueObservingOptionNew
         context:GMAP_ANNOTATION_SELECTED];

Algo más de código:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context{

    NSString *action = (NSString*)context;

    MKAnnotationView *annotationView = [(MKAnnotationView*)object retain];
    BikeAnnotation *bike = [[annotationView annotation] retain];

    if([action isEqualToString:GMAP_ANNOTATION_SELECTED] && [[bike _stationType] intValue] != 5 && [[bike _stationType] intValue] != 6){
        BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
        if (annotationAppeared) {
            NSLog(@"Annotation selected");
        else {
            NSLog(@"annotation deselected");
        }
    }
}

Y poner esto justo después de la @ sintetizar de:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
Respondida el 19/04/2010 a las 19:54
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more