使用协调器模式时无法显示下一个视图控制器
Can't show next view controller while using coordinator pattern
我正在尝试在我的项目中使用 coordinator
。
我想在单击按钮时显示下一个 viewController。
我的代码转到 navigationController.pushViewController(registrationViewController, animated: true)
但没有任何反应
我的 FirstViewController
class AuthViewController: UIViewController {
private var registrationCoordinator: RegistrationCoordinator?
...
@objc func registrationButtonPressed() {
registrationCoordinator = RegistrationCoordinator(navigationController: UINavigationController())
registrationCoordinator?.start()
}
}
我的协调员
class RegistrationCoordinator {
private let navigationController: UINavigationController
var authViewController: AuthViewController?
//Init
init(navigationController: UINavigationController) {
self.navigationController = navigationController
}
//Functions
public func start() {
showRegistrationViewController()
}
private func showRegistrationViewController() {
let registrationViewController = RegistrationViewController()
navigationController.isNavigationBarHidden = true
registrationViewController.view.backgroundColor = .orange
navigationController.pushViewController(registrationViewController, animated: true)
}
}
我的场景代理
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var authCoordinator: AuthCoordinator?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
let rootWindow = UIWindow(windowScene: windowScene)
let navigationController = UINavigationController()
authCoordinator = AuthCoordinator(navigationController: navigationController)
window = rootWindow
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
authCoordinator?.start()
}
@objc func registrationButtonPressed() {
registrationCoordinator = RegistrationCoordinator(navigationController:
UINavigationController())
registrationCoordinator?.start() }
当您调用协调器时,您正在实例化导航控制器。
然后您正在使用您的导航控制器推送 viewcontroller,但您的导航控制器不在视图层次结构中,不在主视图 window 中,不在其他视图中。
换句话说,您的导航控制器存在,但不是界面的一部分。因此它不会显示任何内容。
您没有传递在 SceneDelegate 中使用的同一个导航控制器,您正在创建一个新的导航控制器。
您可以将当前 viewcontroller 的导航控制器传递给协调器。
registrationCoordinator =
RegistrationCoordinator(navigationController:
self.navigationController?)
当然,假设您当前的 viewcontroller 有一个导航控制器(并且您的协调器必须接受选项)
我正在尝试在我的项目中使用 coordinator
。
我想在单击按钮时显示下一个 viewController。
我的代码转到 navigationController.pushViewController(registrationViewController, animated: true)
但没有任何反应
我的 FirstViewController
class AuthViewController: UIViewController {
private var registrationCoordinator: RegistrationCoordinator?
...
@objc func registrationButtonPressed() {
registrationCoordinator = RegistrationCoordinator(navigationController: UINavigationController())
registrationCoordinator?.start()
}
}
我的协调员
class RegistrationCoordinator {
private let navigationController: UINavigationController
var authViewController: AuthViewController?
//Init
init(navigationController: UINavigationController) {
self.navigationController = navigationController
}
//Functions
public func start() {
showRegistrationViewController()
}
private func showRegistrationViewController() {
let registrationViewController = RegistrationViewController()
navigationController.isNavigationBarHidden = true
registrationViewController.view.backgroundColor = .orange
navigationController.pushViewController(registrationViewController, animated: true)
}
}
我的场景代理
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var authCoordinator: AuthCoordinator?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
let rootWindow = UIWindow(windowScene: windowScene)
let navigationController = UINavigationController()
authCoordinator = AuthCoordinator(navigationController: navigationController)
window = rootWindow
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
authCoordinator?.start()
}
@objc func registrationButtonPressed() { registrationCoordinator = RegistrationCoordinator(navigationController: UINavigationController()) registrationCoordinator?.start() }
当您调用协调器时,您正在实例化导航控制器。 然后您正在使用您的导航控制器推送 viewcontroller,但您的导航控制器不在视图层次结构中,不在主视图 window 中,不在其他视图中。
换句话说,您的导航控制器存在,但不是界面的一部分。因此它不会显示任何内容。
您没有传递在 SceneDelegate 中使用的同一个导航控制器,您正在创建一个新的导航控制器。
您可以将当前 viewcontroller 的导航控制器传递给协调器。
registrationCoordinator = RegistrationCoordinator(navigationController: self.navigationController?)
当然,假设您当前的 viewcontroller 有一个导航控制器(并且您的协调器必须接受选项)