Действие выноски аннотации MapView при открытии - PullRequest
0 голосов
/ 12 апреля 2010

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

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

1 Ответ

2 голосов
/ 19 апреля 2010

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

У меня были проблемы с тем, что я не смог обновить информацию в всплывающей подсказке после ее появления. Единственный способ сделать это - создать свой собственный пузырь выноски (насколько я понимаю), который я не чувствовал, учитывая, что у меня есть крайний срок. Я исправил это, добавив дополнительный 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's:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected";
...