0

我有一个带有几个注释的地图视图。每个注解都有一个 leftCalloutAccessoryView,它是一个 UIViewController 类。这样做的原因是我希望每个注释都从服务器加载一些数据,并将该数据的结果添加到注释子标题中。这一切都很完美,除了我不想在我的应用程序启动时加载所有数据,但我希望仅在打开标注气泡时进行远程调用。

有人知道我该怎么做吗?viewWillload、viewDidLoad 等。在这种情况下不工作。还有什么例子吗?

4

1 回答 1

2

我解决了添加观察者的问题。观察者然后做它的事情,然后标注出现。

我遇到的问题是,在显示气泡后,我无法更新标注气泡中的信息。做到这一点的唯一方法是创建自己的标注气泡(据我所知),考虑到我有截止日期,我不喜欢这样做。我通过添加一个带有 alpha 的额外 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";
于 2010-04-19T18:54:25.903 回答