ios - 与后面的 View Controller 交互

标签 ios swift uiviewcontroller

我知道 SE 上有几篇与此问题相关的帖子,但我无法绕过它们找到适合我的情况的适当解决方案。

我在 View Controller 中有一个 map View 。我在 map View VC 的顶部呈现另一个 View Controller ,其中 modalPresentationStyle 设置为 custom(容纳卡片 View ):

Location Card on Map View

对于此场景,我希望 map View 在显示位置卡 View 时仍然能够识别触摸,并且位置卡仍能识别其内部的触摸。就像呈现以下 ListView 时 Apple Maps 的功能一样。

我知道我不能通过 View Controller 传递触摸,但我无法在两者之间做出决定:

  • 将位置卡放入我非常不喜欢的 map View 中,
  • 通过 addChildViewController 呈现位置卡,我不太确定如何实现才能达到我想要的效果。

This SE question给出了详细的答案和一个模仿 Apple Maps 界面的小示例项目,尽管我仍然不知道如何解决我的问题。

最佳答案

我选择了将位置卡 View 转储到 map View 中的选项。 但是我不喜欢它。

问题是我不想在 map View 中使用位置卡的任何逻辑。但与此同时,iOS 没有提供基础设施, View Controller 之间的触摸传输基本上是不可能的,建议的解决方法似乎很难实现。

首先,我将位置卡 View 从 View Controller 迁移到结构。

然后,我定义了一个名为 LocationCardPresentable 的协议(protocol),在扩展时,它要求 Self 的类型为 MapVC。因此,在协议(protocol)扩展中,我可以像在 MapVC 中一样工作,但实际上不是。协议(protocol)扩展有多种显示和关闭位置卡的方法,我可以从 MapVC 中调用这些方法。

关于ios - 与后面的 View Controller 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44435227/

相关文章:

导航栏中不出现小延迟后添加的 iOS 搜索栏

ios - CLGeocoder 曾经返回一个地标

ios - iOS 中的多点连接框架问题

arrays - 使用 Swift 在 MainStoryboard TableView 中显示数组?

ios - 如何将坐标保存到 Firebase Swift 2

ios - 来自 Xib 文件错误的 Swift init ViewController

ios - 关闭弹出 View Controller

ios - AVAudioUnitSampler 错误 loadSoundBankAtURL -> 无法找到补丁 0 库 0x0/0

iphone - 如何在 iPhone 上制作一个不完全覆盖底层屏幕的新屏幕

ios - 使用 UICollectionView 观察 Realm - 竞争条件