Pergunta

Eu tenho um MapView com várias anotações. Cada anotação possui uma Visão de LeftCallOutAccessory, que é uma classe UIViewController. A razão para isso é que quero que cada anotação carregue alguns dados do servidor e adicione o resultado desses dados à legenda da anotação. Tudo isso funciona perfeitamente, exceto que não quero carregar todos esses dados quando meu aplicativo é iniciado, mas quero que a chamada remota seja feita apenas quando a bolha de chamada é aberta.

Alguém sabe como posso fazer isso? O ViewWillLoad, ViewDidload ECT. Não trabalhe neste caso. Algum exemplos também?

Foi útil?

Solução

Eu resolvi o problema adicionando um observador. O observador faz o que faz e depois disso a chamada aparece.

Algo com o qual tive problemas é que não pude atualizar as informações na bolha de chamadas depois que a bolha é mostrada. A única maneira de fazer isso é criar sua própria bolha de chamadas (como eu a entendo), o que é algo que eu não parecia, pois tenho um prazo. Eu consertei isso adicionando um UIView extra com um alfa e um texto "Obtendo dados de localização ...". Acabei de mostrar essa visualização ao pressionar um local e, quando o observador terminar, escondo a vista novamente (fora do curso usando uma animação).

Espero que minha resposta tenha ajudado os outros.

Código:

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

Mais um 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");
        }
    }
}

E coloque isso logo após o @synthesize:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top