除非我关闭,否则两个 VIPER 路由器之间的导航将无法工作

问题描述 投票:0回答:0

我正在尝试实现一项功能,旨在在另一个 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 模块之间正确导航而不使用“关闭”的帮助或建议将不胜感激。

ios swift uinavigationcontroller presentviewcontroller
© www.soinside.com 2019 - 2024. All rights reserved.