打开时的MapView注释标注操作

时间:2010-04-12 12:21:29

标签: iphone annotations mapkit mkannotationview

我有一个带有几个注释的mapview。每个注释都有一个leftCalloutAccessoryView,它是一个UIViewController类。原因是我希望每个注释都从服务器加载一些数据,并将该数据的结果添加到注释subTitle。 这一切都很完美,除了我不想在我的应用程序启动时加载所有数据,但我希望只有在打开标注气泡时才能完成远程调用。

有人知道我怎么做吗? viewWillload,viewDidLoad等。在这种情况下不起作用。还有任何例子吗?

1 个答案:

答案 0 :(得分: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";