MKMapView 注释第二次不可选择

Posted

技术标签:

【中文标题】MKMapView 注释第二次不可选择【英文标题】:MKMapView annotation is not selectable second time 【发布时间】:2014-07-08 17:48:59 【问题描述】:

在我的 iPad 应用程序上,我使用 ios 地图通过注释显示几个点。我也想在选择注释时显示自定义标注。我正在使用 UIPopoverController 来显示标注。但是,这仅在第一次点击注释时才有效。如果我想查看同一注释上的标注,我必须先选择不同的注释,然后点击上一个注释。

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

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

我正在使用情节提要并在那里设置委托。这就是我设置注释的方式。

[self.mapView addAnnotations:self.placemarksArray] 

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

【问题讨论】:

你试过在 didSelectAnnotationView 方法的顶部调用 deselectAnnotation 吗? 哇,我没有。我已经测试过了,它的工作。您能否将此添加为答案,然后我可以接受答案。谢谢你的帮助。 【参考方案1】:

didSelectAnnotationView 委托方法的文档在讨论部分这样说:

您可以使用此方法跟踪注释视图选择状态的变化

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

这意味着委托方法仅在注释视图的状态从“未选中”变为“选中”时触发。

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

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

    [mapView deselectAnnotation:view.annotation animated:YES];

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

【讨论】:

【参考方案2】:

Swift 3 和 4:

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

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


【讨论】:

格式错误。包括讨论。考虑用与问题相同的语言编写解决方案(目标 C)。【参考方案3】:

Swift 3 版本:

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

【讨论】:

以上是关于MKMapView 注释第二次不可选择的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 中的 MKMapView 和编辑

从另一个视图中的 MKMapView 中删除注释

在启动时可靠地选择 MKMapView 中的注释(在 ios 6 和 ios 5.1 中)?

MKMapView 选择注解

当我在 mkMapView 中更改段时无法更改引脚颜色

如何向 MkMapView 自定义注释的副标题添加按钮?