【问题标题】:Custom MKAnnotationView - How to capture touches and NOT dismiss the callout?自定义 MKAnnotationView - 如何捕获触摸而不关闭标注?
【发布时间】:2011-07-25 02:49:49
【问题描述】:

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

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

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

【问题讨论】:

标签: iphone ios sdk mkannotationview callouts


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    您可以使用 hittest 来禁止标注关闭,请查看以下帖子。 Detect tap on title of callout

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-22
      • 2013-08-20
      • 2010-12-06
      • 1970-01-01
      • 2010-11-23
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多