我有一个带有几个注释的mapview。每个注释都有一个leftCalloutAccessoryView,它是一个UIViewController类。原因是我希望每个注释都从服务器加载一些数据,并将该数据的结果添加到注释subTitle。 这一切都很完美,除了我不想在我的应用程序启动时加载所有数据,但我希望只有在打开标注气泡时才能完成远程调用。
有人知道我怎么做吗? viewWillload,viewDidLoad等。在这种情况下不起作用。还有任何例子吗?
答案 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";