我在应用中使用Model View Presenter模式。
我需要引入UITabBarController
来提供路线之间的标签式导航。
我了解如何在MVC
或MVVM
中使用它,但是我不确定如何在不脱离MVP
原理的情况下应用它。
设置标签栏时,我会假设我应用了类似的视图控制器
let controllers = [favoritesVC, downloadsVC, historyVC]
tabBarController.viewControllers = controllers
但是现在当我单击一个选项卡时,我将直接调用视图控制器,而不指示场景开始吗?
答案 0 :(得分:1)
不看更多代码很难回答,但是我相信在MVP中,您应该使用Configurator
配置视图控制器。
class FavouritesConfigurator {
func configureViewController(delegate: FavouritesSceneDelegate?) -> FavouritesViewController {
let viewController = FavouritesViewController()
let presenter = FavouritesPresenter(view: viewController)
presenter.delegate = delegate
viewController.setPresenter(presenter)
return viewController
}
}
您的协调器启动方法应该只是调用FavouritesConfigurator
并返回由演示者等配置的ViewController
。
您可以使用该FavouritesConfigurator
的返回值来设置视图。
这只是将每个视图配置从启动方法移开并直接调用该配置器的情况。这不会违反任何原则,因为您的组件仍然可以隔离,可测试并可以正确调用。
同样,在看不到您的代码的情况下很难准确,但是请尝试以下操作:
let controllers = [FavouritesConfigurator().configureViewController(delegate: self),...,...]
tabBarController.viewControllers = controllers