azione MapView annotazione didascalia quando aperto

voti
0

Ho un mapview con diverse annotazioni. Ogni annotazione ha un leftCalloutAccessoryView che è una classe UIViewController. La ragione di questo è che voglio che ogni annotazione per caricare alcuni dati dal server, e aggiungere il risultato di tali dati al sottotitolo annotazione. Tutto questo funziona perfettamente, se non che io non voglio caricare tutti i dati, quando si avvia la mia app, ma voglio la chiamata remota di essere fatto solo quando la bolla didascalia viene aperto.

Qualcuno sa come posso fare questo? Il viewWillload, viewDidLoad ect. non funzionano in questo caso. Esempi come bene?

È pubblicato 12/04/2010 alle 13:21
fonte dall'utente
In altre lingue...                            


1 risposte

voti
2

Ho risolto il problema aggiungendo un osservatore. L'osservatore poi fa la sua cosa e dopo che il richiamo si presenta.

Qualcosa ho avuto problemi con è che non ho potuto aggiornare le informazioni nella bolla didascalia dopo la bolla è mostrato. L'unico modo per farlo è quello di creare il proprio bolla chiamante (se ho capito bene), che è qualcosa che non avevo voglia, dato che ho una scadenza. Mi fisso che con l'aggiunta di un UIView in più con un alfa su di esso e un testo "Ottenere dati di posizione ...". Ho appena presento quella vista quando si preme una posizione e quando l'osservatore è fatto, mi nascondo la vista di nuovo (fuori rotta utilizzando un'animazione).

Spero che la mia risposta ha aiutato gli altri.

Codice:

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

Alcuni più codice:

- (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 mettere questo subito dopo la @ sintetizzare di:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
Risposto il 19/04/2010 a 19:54
fonte dall'utente

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