我正在尝试实现一项功能,旨在在另一个 VIPER 模块中打开一个 VIPER 模块。但只有当我使用“解雇”时它才有效,而我不想这样做。我希望能够将一个 VIPER 模块嵌入到另一个模块之上。
这是我的代码:
VIPER 1 - 路由器
@objc func openAnotherVC(_ notification: Notification) {
DispatchQueue.main.async {
//self.viewController?.dismiss(animated: true) // only works if I dismiss, I don't want to do that
self.goToAnotherVC()
}
}
func goToAnotherVC() {
guard let anotherVC = AnotherVCRouter.createModule().controller else { return }
self.viewController?.present(anotherVC, animated: true, completion: nil)
}
VIPER 2 - 路由器
class AnotherVCRouter: AnotherVCRouterProtocol {
var controller: UIViewController?
static func createModule() -> AnotherVCRouterProtocol {
let router = AnotherVCRouter()
let view = AnotherVC(nibName: nil, bundle: nil)
let interactor = AnotherVCInteractor()
let presenter = AnotherVCPresenter(view: view, interactor: interactor, router: router)
let navController = UINavigationController(rootViewController: view)
navController.modalPresentationStyle = .custom
navController.navigationBar.isTranslucent = true
navController.navigationBar.shadowImage = UIImage()
navController.navigationBar.barTintColor = UIColor.white
router.controller = navController
return router
}
}
协议
protocol AnotherVCRouterProtocol: AnyObject {
var controller: UIViewController? {get set}
static func createModule() ->AnotherVCRouterProtocol
}
任何有关如何在这些 VIPER 模块之间正确导航而不使用“关闭”的帮助或建议将不胜感激。