如何使用 navigationController 将视图模型传递给 viewcontroller?
How to pass viewmodel to a viewcontroller using navigationController?
所以我运行进入这个奇怪的problem.This是我的导航
navigation
基本上是 LoginVC,然后是 NavigationController,然后是 HomeVC
我正在尝试将 rootViewcontroller 从 loginVC 更改为 Navigation.HomeVC 本身就是 navigationController 的 rootVC。
问题是我不知道如何将 viewmodel 从 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)
}
有什么办法可以实现吗?还是我在做一些基金
如果您通过 Storyboard 初始化 HomeVC
,则无法使用 init(viewmodel:)
初始化程序对其进行初始化。 Storyboard 使用 init(coder:)
初始化器来初始化你的视图控制器。因此,您需要在初始化 HomeVC
后设置视图模型。如果你在 Storybard 上将 HomeVC
设置为 UINavigationController
的根目录。您可以从 UINavigationController
的 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。
所以我运行进入这个奇怪的problem.This是我的导航 navigation 基本上是 LoginVC,然后是 NavigationController,然后是 HomeVC 我正在尝试将 rootViewcontroller 从 loginVC 更改为 Navigation.HomeVC 本身就是 navigationController 的 rootVC。 问题是我不知道如何将 viewmodel 从 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)
}
有什么办法可以实现吗?还是我在做一些基金
如果您通过 Storyboard 初始化 HomeVC
,则无法使用 init(viewmodel:)
初始化程序对其进行初始化。 Storyboard 使用 init(coder:)
初始化器来初始化你的视图控制器。因此,您需要在初始化 HomeVC
后设置视图模型。如果你在 Storybard 上将 HomeVC
设置为 UINavigationController
的根目录。您可以从 UINavigationController
的 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。