在我的iPad应用中,我使用iOS地图使用注释显示几个点。我想在选择注释时显示自定义标注。我正在使用UIPopoverController来显示callout。但是,这仅在第一次点击注释时有效。如果我想在相同的注释上看到标注,我必须先选择不同的注释,然后点击之前的注释。
基本上这个委托方法不是第二次触发。
-(void)mapView:(MKMapView *)mapView
didSelectAnnotationView:(MKAnnotationView *)view
我正在使用故事板,并在那里设置委托。这就是我设置注释的方式。
[self.mapView addAnnotations:self.placemarksArray]
有谁能告诉我上述问题的原因? 感谢
答案 0 :(得分:28)
didSelectAnnotationView
委托方法的文档在讨论部分中说明了这一点:
您可以使用此方法在注释视图的选择状态中跟踪 更改 。
(我在单词"更改"上添加了粗体和斜体。)
这意味着委托方法仅在注释视图的状态从"未选择"选择"。
为了避免必须点击另一个注释或地图(将所选注释的状态更改为"未选择")并检测"选择"再次在相同的注释上,您可以强制取消didSelectAnnotationView
方法顶部的取消选择:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
[mapView deselectAnnotation:view.annotation animated:YES];
//existing code to handle tap on annotation...
}
答案 1 :(得分:1)
Swift 3版本:
mapView.deselectAnnotation(view.annotation, animated: true)
答案 2 :(得分:1)
Swift 3和4:
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
//THIS LINE IS THE SOLUTION
mapView.deselectAnnotation(view.annotation, animated: true)
}