【问题标题】:ios mapview. Dismiss callout but keep annotation selectedios地图视图。关闭标注但保持选中注释
【发布时间】:2026-01-27 00:50:02
【问题描述】:

我遇到了一种情况,我在 mapview 上有一些自定义注释。选择这些注释后,我通过

将图像更改为选定状态
didSelectAnnotationView 

调用 [view setImage] 的方法,我还显示了一个标注气泡。标注有一个附件视图,点击时会添加一个新的子视图,其中包含更多信息。所有这一切都很好,除了当我点击标注附件视图时,我希望标注消失,但选择的图像状态保持不变。目前我知道如何解除标注的唯一方法是通过

 didDeselectAnnotationView

不过,这也是我将图像状态设置为默认未选中图像的地方。

有谁知道是否可以只关闭标注但在我的注释上保留选定状态?

我已经通过在添加 detailView 时设置一个布尔值来决定是否删除“活动”图像来完成这项工作。但是,当我选择一个新注释时,它会变得很棘手,因为我最终会得到多个显示所选状态图像的注释。我尝试遍历所有注释并将它们的图像设置为“关闭”状态,但这似乎不起作用,我尝试设置对当前选定注释的引用并更改图像,但它再次没有没用。

示例流程:

  • 用户选择了一个图钉
  • didSelectAnnotationView 被调用
  • 图钉图片更改为“活动”并显示标注
  • 用户在标注中点击附件视图。
  • BOOLEAN popOverShowing 设置为 YES
  • didDeselectAnnotationView 被调用。由于 popOverShowing 为 YES,图像不会更改为关闭状态,但标注会消失
  • 用户点击新注释
  • Popover 消失,popOverShowing 设置为 NO
  • 新注释设置为“活动”图像
  • 所有其他注释应该重置为关闭图像(这似乎不会发生)

【问题讨论】:

    标签: ios mkmapview mapkit mkannotation


    【解决方案1】:

    保持 previousPin 的引用在 didSelectAnnotationView 中将其设置为关闭,除非它是 nil。 然后将新选择的引脚设置为previousPin。希望对您有所帮助。

    【讨论】:

    • 我已经尝试过了(我在上面提到我正在存储一个参考)。问题是我在另一个地方用 AnnotationViews 注释覆盖了这个引用,这就是混乱的地方
    • 对不起,我可以跳过。如何设置 canShowCallout 或启用属性 NO 可能会关闭标注,我没有尝试过。另一个想法是,calloutView 也是 annotationView 的子视图。然后找到它将 alpha 设置为 0。
    • 我尝试将 canShowCallout 设置为 NO,但没有成功。 alpha 是个好主意,可能比我现在正在做的更干净(根据我上面的评论现在正在工作)
    • 很遗憾,您无法访问 MKAnnotationView 的 calloutView 属性