MKMapView标注无法第二次选择

14
在我的iPad应用程序中,我正在使用iOS地图来显示几个点的注释。当选择一个注释时,我也想显示自定义的弹出窗口。我正在使用UIPopoverController来显示弹出窗口。但是,这仅在第一次点击注释时起作用。如果我想在同一个注释上看到弹出窗口,我必须先选择不同的注释,然后再点击之前的注释。
基本上,这个委托方法第二次没有触发。
-(void)mapView:(MKMapView *)mapView 
    didSelectAnnotationView:(MKAnnotationView *)view

我正在使用Storyboard,并在其中设置了委托。这是我设置注释的方式。

[self.mapView addAnnotations:self.placemarksArray] 

请问有人可以告诉我上述问题的原因吗? 谢谢


你尝试在didSelectAnnotationView方法的顶部调用deselectAnnotation了吗? - user467105
哇,我还没有。我已经测试过了,它可以工作。你能把这个作为答案添加一下吗?那我就可以接受这个答案了。谢谢你的帮助。 - Chinthaka
3个回答

30

didSelectAnnotationView 代理方法的文档在讨论部分中说:

您可以使用此方法来跟踪注释视图选择状态的更改

(我在“更改”一词上添加了粗体和斜体。)

这意味着当注释视图的状态从“未选择”变为“已选择”时,才会触发委托方法。


为了避免不得不点击另一个注释或地图(这会将所选注释的状态更改为“未选择”),并再次检测同一注释的“选择”,您可以在 didSelectAnnotationView 方法的顶部强制取消选择:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
    [mapView deselectAnnotation:view.annotation animated:YES];

    //existing code to handle tap on annotation...
}

4

Swift 3和4:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

    //THIS LINE IS THE SOLUTION
    mapView.deselectAnnotation(view.annotation, animated: true)

}

这个格式很糟糕。需要进行讨论。考虑用与问题相同的语言(Objective C)编写解决方案。 - Gingi

2

Swift 3 版本:

mapView.deselectAnnotation(view.annotation, animated: true)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接