在 MVVM + Coordinator 中,如何处理子视图?
Posted
技术标签:
【中文标题】在 MVVM + Coordinator 中,如何处理子视图?【英文标题】:In MVVM + Coordinator, how to deal with sub view? 【发布时间】:2020-12-12 10:53:57 【问题描述】:我正在开发一个 ios MVVM + Coordinator/RxSwift 项目(非 swiftUI)。
在groundViewController中,屏幕上有多个项目,用户可以点击任何项目来调用该项目的详细视图。点击一个项目后,详细视图将滑入,当用户点击另一个项目时,详细视图将滑出,然后再次滑入更新信息。 detailView 是半屏大小,用户也可以点击 groundViewController 上的空白区域来关闭详细视图(滑出动画)。(所以只有一个 detailView)
我决定将详细视图制作为 UIView,它将拥有自己的协调器和 ViewModel,并添加到 groundViewControll.view。但是我现在对如何在它们之间或事件流之间进行通信感到困惑。
问题:在 MVVM/Coordinator 模式中,将此流程设置为是否正确:
groundViewController (receive a tap on the object) - >
groundViewModel - >
groundCoordinator (creat and pass itemID ) - >
detailedViewCoordinator (creat) - >
detailedViewModel and detialedView
detialedView 的滑入/滑出动画应该由谁负责?
【问题讨论】:
GroundCoordinator 应该负责显示细节并将其关闭。你应该将协调器的路由传递给detailView,它会触发另一个detail,但会先关闭当前detail。 那么当详细视图可见时,您仍然可以看到地面视图上的项目并与之交互? @DanielT。你是对的。这也是我选择 UIView 而不是 UIViewController 的原因之一。我刚刚更新了问题以使其更清楚。 【参考方案1】:当地面视图收到点击时,它会告诉地面视图模型。
-
地面视图模型告诉地面协调员。
地面协调员通知当前细节协调员(如果有的话)解雇。
当前详细信息协调员取消了其视图。
地面协调员创建一个新的细节协调员。
地面协调员告诉新的细节协调员进行演示。
新的细节协调器创建细节视图模型和细节
看法。它将详细视图模型传递给详细视图。
细节协调员显示细节视图。
在创建和销毁项目的确切时间方面存在一些差异,但以上是大体思路。
【讨论】:
谁应该负责 /trigger detialedView 的滑入/滑出动画? 细节协调器触发它,视图控制器执行它。以上是关于在 MVVM + Coordinator 中,如何处理子视图?的主要内容,如果未能解决你的问题,请参考以下文章
使用 MVVM+Coordinators 模式的 UIViewController 转换
是否可以在 UIViewRepresentable 中使用 Coordinator 检测 PDFView 通知?
storm trident 如何标记一个batch被处理——coordinator spout
在 NSViewControllerRepresentable 中使用 SwiftUI Coordinator 和 NSTableView?