【问题标题】:In MVVM + Coordinator, how to deal with sub view?在 MVVM + Coordinator 中,如何处理子视图?
【发布时间】: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 的原因之一。我刚刚更新了问题以使其更清楚。

标签: ios swift mvvm rx-swift


【解决方案1】:

当地面视图收到点击时,它会告诉地面视图模型。

  1. 地面视图模型告诉地面协调员。
  2. 地面协调员通知当前细节协调员(如果有的话)解雇。
  3. 当前详细信息协调员取消了其视图。
  4. 地面协调员创建一个新的细节协调员。
  5. 地面协调员告诉新的细节协调员进行演示。
  6. 新的细节协调器创建细节视图模型和细节 看法。它将详细视图模型传递给详细视图。
  7. 细节协调员显示细节视图。

在创建和销毁项目的确切时间方面存在一些差异,但以上是大体思路。

【讨论】:

  • 谁应该负责 /trigger detialedView 的滑入/滑出动画?
  • 细节协调器触发它,视图控制器执行它。
猜你喜欢
  • 2020-02-21
  • 1970-01-01
  • 2011-09-26
  • 2022-01-24
  • 2011-01-20
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多