如何使用带有 UITabBarController 的 MVP 架构
How to use MVP architecture w/ a UITabBarController
我在应用中使用 Model View Presenter 模式。
我需要引入一个 UITabBarController
来提供路线之间的标签式导航。
我知道我可能会如何在 MVC
或 MVVM
中使用它,但我不确定如何在不脱离 MVP
原则的情况下应用它。
当我设置我的标签栏时,我假设我应用了像
这样的视图控制器
let controllers = [favoritesVC, downloadsVC, historyVC]
tabBarController.viewControllers = controllers
但是现在当我点击一个选项卡时我会直接调用视图控制器而不是指示场景开始?
如果不看更多代码就很难回答,但是我相信在 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
和 returning 一个 ViewController
与你的演示者等配置
您可以使用 FavouritesConfigurator
的 return 值来设置您的视图。
这只是将每个视图配置从启动方法中移开并直接调用该配置器的情况。这并不违反任何原则,因为您的组件仍然是独立的、可测试的和正确调用的。
同样,如果没有看到您的代码,很难做到准确,但试试这个:
let controllers = [FavouritesConfigurator().configureViewController(delegate: self),...,...]
tabBarController.viewControllers = controllers
我在应用中使用 Model View Presenter 模式。
我需要引入一个 UITabBarController
来提供路线之间的标签式导航。
我知道我可能会如何在 MVC
或 MVVM
中使用它,但我不确定如何在不脱离 MVP
原则的情况下应用它。
当我设置我的标签栏时,我假设我应用了像
这样的视图控制器let controllers = [favoritesVC, downloadsVC, historyVC]
tabBarController.viewControllers = controllers
但是现在当我点击一个选项卡时我会直接调用视图控制器而不是指示场景开始?
如果不看更多代码就很难回答,但是我相信在 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
和 returning 一个 ViewController
与你的演示者等配置
您可以使用 FavouritesConfigurator
的 return 值来设置您的视图。
这只是将每个视图配置从启动方法中移开并直接调用该配置器的情况。这并不违反任何原则,因为您的组件仍然是独立的、可测试的和正确调用的。
同样,如果没有看到您的代码,很难做到准确,但试试这个:
let controllers = [FavouritesConfigurator().configureViewController(delegate: self),...,...]
tabBarController.viewControllers = controllers