3

我有一个自定义的 MKAnnotationView 子类。它完全按照我的意愿显示视图。在那个视图中,我有一个按钮。我想捕获按钮上的事件以执行操作。这工作得很好。

但是,我不希望标注被解雇或消失。基本上,触摸标注中的按钮将开始播放声音,但我想保留注释,以便用户可以按需要按停止,而无需再次触摸地图图钉以恢复注释。在另一种情况下,我希望按钮触摸能够为标注中的更多细节设置动画,因此我绝对不想在此时关闭标注。

每当用户选择标注或标注内的按钮时,如何防止标注消失?

4

2 回答 2

6

这可能不是最好的解决方案,但它绝对有效。首先,我尝试了很多东西,比如观察上下文等,但我从来没有通过崩溃,而且看起来很麻烦。所以,这就是我所做的:

我首先指定了保持警报可见的控制因素。就我而言,我创建了一个自定义注释视图,每当用户单击该自定义视图上的按钮时,我希望它保持可见,甚至可能更改内容。所以,我在那个自定义视图上设置了一个委托,这样我的地图就可以知道什么时候发生了变化。在我的地图视图控制器中,我捕捉到该消息并将类成员变量设置为 true 以表示我希望注释视图保留。

注意:这将在选择消息出现之前发生。

现在,在我的 didDeselectAnnotation 方法中,我检查了布尔值。如果我想让它保持可见,我选择不删除我的注释,我重置布尔值,然后手动重新选择注释,将动画设置为 NO。这让注释视图“保持”可见——可能是作弊,但用户看不到差异。每当该布尔值表明取消选择没问题时,我只需删除注释,一切都很好。

所以,工作流程是这样的:

  1. 触摸针
  2. CustomAnnotationView 显示
  3. 用户单击 CustomAnnotationView 上的按钮,该按钮会通知委托 (mapView) 该操作已发生
  4. 设置类布尔值以知道您要保留注释
  5. mapView 然后调用 didDeselectAnnotation 方法
  6. 在 didDeselectAnnotation 方法中,使用条件来决定是否应该删除注释,或者通过不删除注释并在没有动画的情况下手动重新选择它来保留它。

我希望这对其他人有帮助。我花了一段时间才弄清楚这一点,所以我希望它可以节省您的时间。

如果您找到更好的解决方案,请务必在此处发布!

于 2011-07-29T13:49:47.853 回答
1

您可以使用 hittest 抑制标注关闭,请查看以下帖子。 检测对标注标题的点击

于 2012-11-21T15:55:08.913 回答