我下载了viper模块的模板,它在视图中没有链接,我如何在这里使用导航?
现场代表
let startModule = CardsCollectionRouter.createModule()
let navigationController = UINavigationController(rootViewController: startModule)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
路由器
class CardsCollectionRouter: PresenterToRouterCardsCollectionProtocol {
// MARK: Static methods
static func createModule() -> UIViewController {
let viewController = CardsCollectionViewController()
let presenter: ViewToPresenterCardsCollectionProtocol & InteractorToPresenterCardsCollectionProtocol = CardsCollectionPresenter()
let networkService = NetworkService()
viewController.presenter = presenter
viewController.presenter?.router = CardsCollectionRouter()
viewController.presenter?.view = viewController
viewController.presenter?.interactor = CardsCollectionInteractor(networkService: networkService)
viewController.presenter?.interactor?.presenter = presenter
return viewController
}
func showDescription(description: CharacterModel?) {
let descriptionVC = DescripModuleRouter.createModule(description: description)
//How to go on next screen??
let viewController = CardsCollectionViewController()
viewController.navigationController?.pushViewController(descriptionVC, animated: true)
}
}
也许我有一个简单的方法来获得一个链接到视图?
和路由器中的view.goToAnotherScreen一样,我将在ViewController上使用这个方法
发布于 2022-10-20 12:37:20
在使用此模式时,不应该在路由器之外创建导航方法,因为导航是路由器的责任。您可以创建router.goToAnotherScreen
并从视图控制器调用它。创建路由器时,应将视图控制器传递给路由器,并在路由器内部调用viewController.navigationController?.push...
。
class CardsCollectionRouter: PresenterToRouterCardsCollectionProtocol {
// MARK: Dependencies
private weak var viewController: UIViewController!
// MARK: Initialization
init(viewController: UIViewController) {
self.viewController = viewController
}
// MARK: Static methods
static func createModule() -> UIViewController {
let viewController = CardsCollectionViewController()
let presenter = CardsCollectionPresenter()
let networkService = NetworkService()
viewController.presenter = presenter
viewController.presenter?.router = CardsCollectionRouter(viewController: viewController)
viewController.presenter?.view = viewController
viewController.presenter?.interactor = CardsCollectionInteractor(networkService: networkService)
viewController.presenter?.interactor?.presenter = presenter
return viewController
}
func showDescription(description: CharacterModel?) {
let descriptionVC = DescripModuleRouter.createModule(description: description)
//How to go on next screen: Use your VC instance, which is the one your VIPER scene is controlling
self.viewController.navigationController?.pushViewController(descriptionVC, animated: true)
}
}
https://stackoverflow.com/questions/74139824
复制相似问题