2010-04-12 4 views
0

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

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

+0

что именно "при открытии выноска пузырь" –

+0

Я имею в виду выноску, которая открывается при нажатии значка аннотации. Он содержит заголовок, субтитры, leftCalloutAccessoryView и rightCalloutAccessoryView. –

ответ

2

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

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

И поставить это только после того, как @ синтезируют'S:

NSString * const GMAP_ANNOTATION_SELECTED = @"gmapselected"; 
Смежные вопросы