我有一个带有几个注释的地图视图。每个注解都有一个 leftCalloutAccessoryView,它是一个 UIViewController 类。这样做的原因是我希望每个注释都从服务器加载一些数据,并将该数据的结果添加到注释子标题中。这一切都很完美,除了我不想在我的应用程序启动时加载所有数据,但我希望仅在打开标注气泡时进行远程调用。
有人知道我该怎么做吗?viewWillload、viewDidLoad 等。在这种情况下不工作。还有什么例子吗?
我有一个带有几个注释的地图视图。每个注解都有一个 leftCalloutAccessoryView,它是一个 UIViewController 类。这样做的原因是我希望每个注释都从服务器加载一些数据,并将该数据的结果添加到注释子标题中。这一切都很完美,除了我不想在我的应用程序启动时加载所有数据,但我希望仅在打开标注气泡时进行远程调用。
有人知道我该怎么做吗?viewWillload、viewDidLoad 等。在这种情况下不工作。还有什么例子吗?
我解决了添加观察者的问题。观察者然后做它的事情,然后标注出现。
我遇到的问题是,在显示气泡后,我无法更新标注气泡中的信息。做到这一点的唯一方法是创建自己的标注气泡(据我所知),考虑到我有截止日期,我不喜欢这样做。我通过添加一个带有 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";