Действие выноски аннотации MapView при открытии

У меня есть карта с несколькими аннотациями. У каждой аннотации есть leftCalloutAccessoryView, который является классом UIViewController. Причина этого в том, что я хочу, чтобы каждая аннотация загружала некоторые данные с сервера и добавляла результат этих данных в подзаголовок аннотации. Все это работает отлично, за исключением того, что я не хочу загружать все эти данные при запуске моего приложения, но я хочу, чтобы удаленный вызов выполнялся только при открытии всплывающего окна.

Кто-нибудь знает, как я могу это сделать? ViewWillload, viewDidLoad и т. д. не работают в этом случае. Так же есть примеры?


person Paul Peelen    schedule 12.04.2010    source источник
comment
что именно происходит, когда всплывающая выноска открывается   -  person Mihir Mehta    schedule 12.04.2010
comment
Я имею в виду выноску, которая открывается, когда вы нажимаете аннотационную булавку. Он содержит заголовок, подзаголовок, leftCalloutAccessoryView и rightCalloutAccessoryView.   -  person Paul Peelen    schedule 12.04.2010


Ответы (1)


Я решил проблему, добавив наблюдателя. Затем наблюдатель делает свое дело, и после этого появляется выноска.

У меня были проблемы с тем, что я не мог обновить информацию в пузыре выноски после его отображения. Единственный способ сделать это — создать свой собственный пузырь с выноской (насколько я понимаю), чего мне не хотелось, учитывая, что у меня есть крайний срок. Я исправил это, добавив дополнительный UIView с альфой и текстом «Получение данных о местоположении...». Я просто показываю этот вид при нажатии на местоположение, а когда наблюдатель готов, я снова скрываю вид (конечно, с помощью анимации).

Надеюсь, мой ответ помог другим.

Код:

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

Еще немного кода:

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

И поместите это сразу после @synthesize:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
person Paul Peelen    schedule 19.04.2010