如何使用带有UITabBarController的MVP架构

时间:2019-01-16 13:33:22

标签: swift uitabbarcontroller mvp

我在应用中使用Model View Presenter模式。

我需要引入UITabBarController来提供路线之间的标签式导航。

我了解如何在MVCMVVM中使用它,但是我不确定如何在不脱离MVP原理的情况下应用它。

设置标签栏时,我会假设我应用了类似的视图控制器

let controllers = [favoritesVC, downloadsVC, historyVC]
tabBarController.viewControllers = controllers

但是现在当我单击一个选项卡时,我将直接调用视图控制器,而不指示场景开始吗?

1 个答案:

答案 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