所以我遇到了這個奇怪的問題。這是我的導航 導航 ,基本上是 LoginVC,然后是 NavigationController,然后是 HomeVC 我正在嘗試將 rootViewcontroller 從 loginVC 更改為 Navigation。HomeVC 本身就是 navigationController 的 rootVC。問題是我無法弄清楚如何將視圖模型從 loginVC 傳遞到 homeVC。這就是我實體化 NavigationController 的方式:
loginViewModel.loginStatus.bind { [weak self] isLoggedIn in
switch isLoggedIn {
case true:
print("---login was successfull,transfering to home page---")
let navController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "customNavigationController") as! UINavigationController
self!.view.window?.rootViewController = navController
case false:
AlertManager.initializeAlert(show: .incorrectData, on: self!)
default: break
}
}
}
但我不知道如何將 ViewModel 傳遞給我的 homeVC
init(_ viewmodel: HomeViewModel) {
self.homeViewModel = viewmodel
super.init(nibName: nil, bundle: nil)
}
有沒有辦法做到這一點?還是我在做一些基金
uj5u.com熱心網友回復:
如果您HomeVC通過 Storyboard 進行初始化,則無法使用初始化程式對其進行init(viewmodel:)初始化。Storyboard 使用init(coder:)初始化程式來初始化您的視圖控制器。因此,您需要在初始化HomeVC. 如果您將您的設定HomeVC為您UINavigationController在 Storybard 上的根目錄。您可以從UINavigationController's 的topViewController屬性中訪問它。
但是,如果您想使用初始化程式注入方法來傳遞您的依賴項,那么您需要以編程方式初始化您的視圖控制器。例如:
loginViewModel.loginStatus.bind { [weak self] isLoggedIn in
switch isLoggedIn {
case true:
print("---login was successfull,transfering to home page---")
let homeView = HomeVC(HomeViewModel()) // you can replace it with your actual view model
let navController = UINavigationController(rootViewController: homeView)
self!.view.window?.rootViewController = navController
case false:
AlertManager.initializeAlert(show: .incorrectData, on: self!)
default: break
}
}
}
但是,為了以編程方式初始化您的視圖控制器,您也需要以編程方式進行 VC 的設計,或者您需要使用 xib 檔案而不是 Storyboard。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/429687.html
上一篇:如何在JetpackCompose的水平尋呼機中添加影片?
下一篇:Swift設定默認值參考系結
