Objaśnienie działania MapView Adnotacja po otwarciu

głosy
0

Mam MapView z kilkoma adnotacji. Każda adnotacja ma leftCalloutAccessoryView który jest klasa UIViewController. Powodem tego jest to, że chcę każda adnotacja załadować niektórych danych z serwera i dodać wynik tych danych do podtytułu adnotacji. To wszystko działa doskonale, z wyjątkiem, że nie chcę, aby załadować wszystkie dane, kiedy moja aplikacja jest uruchomiona, ale chcę do zdalnego połączenia należy przeprowadzić tylko wtedy, gdy bańka objaśnienie jest otwarty.

Czy ktoś wie w jaki sposób mogę to zrobić? ViewWillload, viewDidLoad ect. nie działają w tym przypadku. Wszelkie przykłady, jak również?

Utwórz 12/04/2010 o 13:21
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
2

I rozwiązać problem dodając obserwatora. Obserwator następnie robi jego rzecz, a potem pojawia się objaśnienie.

Coś miałem problemy z jest, że nie mogę zaktualizować informacje w bańce objaśnienia po bańka jest pokazany. Jedynym sposobem, aby to zrobić, aby stworzyć swój własny objaśnienia bańkę (jak rozumiem), który jest coś, czego nie miała ochoty zważywszy, że mam termin. Naprawiłem że poprzez dodanie UIView z alfa na nim i tekst „Pobieranie danych o lokalizacji ...”. Ja po prostu pokazać się tego widoku, gdy naciśnięcie lokalizację i gdy obserwator jest zrobione, ja znowu ukryć widok (poza oczywiście za pomocą animacji).

Nadzieję, że moja odpowiedź pomogła innym.

Kod:

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

Niektóre bardziej Kod:

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

I umieścić to tuż po @ Synthesize na:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
Odpowiedział 19/04/2010 o 19:54
źródło użytkownik

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