【发布时间】:2017-05-22 10:38:23
【问题描述】:
我最近开始使用协调器(例如:MVVM with Coordinators and RxSwift)来改进我当前的 MVVM 架构。从 UIViewController 中删除导航相关代码是一个很好的解决方案。
但是我遇到了 1 个特定场景的问题。当 UIViewController 被默认的后退按钮或边缘滑动手势弹出时,就会出现此问题。
使用列表-详细信息界面的快速示例:
列表 UIViewController 由 UINavigationController 内的 ListCoordinator 显示。当一个项目被点击时,ListCoordinator 创建一个 DetailCoordinator,将其注册为子协调器并启动它。 DetailCoordinator 将详细信息 UIViewController 推送到 UINavigationController 上,就像每篇 MVVM-C 博客文章所说明的那样。
每篇 MVVM-C 博客文章都未能说明的是,当 UIViewController 详细信息被默认的后退按钮或边缘滑动手势弹出时会发生什么。
DetailCoordinator 应该负责弹出细节 UIViewController,但是 a) 它不知道后退按钮被点击,并且 b) 弹出是自动发生的。此外,ListCoordinator 无法从其子协调器中删除 DetailCoordinator。
一种解决方案是使用自定义后退按钮,该按钮发出点击信号并将其传递给 DetailCoordinator。另一个可能是使用 UINavigationControllerDelegate。
其他人是如何解决这个问题的?我确定我不是第一个。
【问题讨论】:
-
为什么不使用自定义按钮?
标签: ios mvvm uinavigationcontroller