MKMapView注释第二次无法选择

时间:2014-05-20 12:46:34

标签: ios mkmapview mkannotation mkannotationview

在我的iPad应用中,我使用iOS地图使用注释显示几个点。我想在选择注释时显示自定义标注。我正在使用UIPopoverController来显示callout。但是,这仅在第一次点击注释时有效。如果我想在相同的注释上看到标注,我必须先选择不同的注释,然后点击之前的注释。

基本上这个委托方法不是第二次触发。

-(void)mapView:(MKMapView *)mapView 
    didSelectAnnotationView:(MKAnnotationView *)view

我正在使用故事板,并在那里设置委托。这就是我设置注释的方式。

[self.mapView addAnnotations:self.placemarksArray] 

有谁能告诉我上述问题的原因? 感谢

3 个答案:

答案 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)

}