MapView Annotation Callout Aktion, wenn sie geöffnet

stimmen
0

Ich habe einen mapview mit mehreren Anmerkungen. Jede Anmerkung hat eine leftCalloutAccessoryView die eine UIViewController-Klasse ist. Der Grund dafür ist, dass ich jede Anmerkung möchte einige Daten vom Server laden, und das Ergebnis dieser Daten an die Anmerkung Untertitel hinzuzufügen. Das alles funktioniert perfekt, außer, dass ich will nicht alle diese Daten laden, wenn mein App gestartet wird, aber ich mag den Remote-Aufruf nur getan werden, wenn die Hinweisblase geöffnet wird.

Weiß jemand, wie ich das tun kann? Die viewWillload, viewDidLoad ect. nicht in diesem Fall arbeiten. Alle Beispiele, wie gut?

Veröffentlicht am 12/04/2010 um 13:21
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Ich löste das Problem, einen Beobachter hinzufügen. Der Beobachter dann tut seine Sache und danach die Legende erscheint.

Etwas, das ich hatte Probleme mit ist, dass ich nicht die Informationen in der Hinweisblase aktualisieren konnten, nachdem die Blase gezeigt. Der einzige Weg, dies zu tun, ist Ihre eigene Hinweisblase zu schaffen (wie ich es verstehe), die etwas, das ich nicht so gegeben hätte das Gefühl, dass ich einen Termin habe. Ich reparierte, dass eine zusätzliche UIView mit einem Alpha auf sie durch Zugabe und einem Text „Standortdaten bekommen ...“. Ich zeige nur diese Ansicht auf, wenn eine Position gedrückt, wenn der Beobachter geschehen ist, ich verstecke die Ansicht wieder (aus der Bahn durch eine Animation verwenden).

Hoffe, dass meine Antwort anderen geholfen.

Code:

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

Einige weitere Code:

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

Und setzen diese unmittelbar nach dem @ synthesize ist:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
Beantwortet am 19/04/2010 um 19:54
quelle vom benutzer

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