是否可以在新的视图控制器上显示带有 Map 注释的更多详细信息的视图控制器,当它弹出时返回到 MKMap 视图,并且该位置的注释仍然在它上面。我似乎无法在 SDK 文档中找到一种方法来表明它是可能的。
问问题
2209 次
2 回答
2
如果您执行以下操作,可以找到我自己的问题的答案:
你可以做的是使用观察者,所以在
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
方法,您可以像这样添加代码:
//Add an observer for the selected-property on the MKAnnotationView. Delegate to self.
[annotationView addObserver:self
forKeyPath:@"selected"
options:NSKeyValueObservingOptionNew
context:GMAP_ANNOTATION_SELECTED];
annotationView.annotation = annotation;
annotationView.canShowCallout = NO;
然后创建一个观察者 catch,当用户单击屏幕上的注释时,它将调用该方法来呈现任何视图:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context{
NSString *action = (NSString*)context;
if([action isEqualToString:GMAP_ANNOTATION_SELECTED]){
BOOL annotationAppeared = [[change valueForKey:@"new"] boolValue];
if (annotationAppeared) {
[self showAnnotation:((AssetAnnotationView*) object).annotation];
}
else {
//NSLog(@"annotation deselected %@", ((AssetAnnotationView*) object).annotation.title);
//[self hideAnnotation];
}
}
}
然后让您的方法显示模态视图或您想要的任何内容:
- (void)showAnnotation:(AssetAnnotationView*)annotation {
UINavigationController *aNavController = [[UINavigationController alloc] initWithRootViewController:self.assetInfoViewController];
aNavController.navigationBar.barStyle = UIBarStyleBlack;
[self presentModalViewController:aNavController animated:YES];
[aNavController release];
}
在 viewWillAppear 中取消选择:
NSArray *selected = [localMapView selectedAnnotations]; for(id annotation in selected) { [localMapView deselectAnnotation:annotation animated:NO]; }
于 2010-04-11T01:02:57.600 回答
0
您还可以为您创建的每个注释使用标签。为我工作。
于 2010-06-06T02:51:24.440 回答