[英]Can't show next view controller while using coordinator pattern
我正在尝试在我的项目中使用coordinator
器。 我想在单击按钮时显示下一个 viewController。 我的代码转到navigationController.pushViewController(registrationViewController, animated: true)
但没有任何反应
我的第一个视图控制器
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() }
当你打电话给你的协调员时,你正在实例化导航 controller。然后你正在使用你的导航 controller 来推送一个视图控制器,但是你的导航 controller 不在视图层次结构中,不在主 window 中,不在其他视图中。
也就是说,你的导航controller存在,但不是界面的一部分。 因此,它不会显示任何内容。
您没有传递在 SceneDelegate 中使用的相同导航 Controller,您正在创建一个新导航。
您可以将当前视图控制器的导航 controller 传递给协调器。
registrationCoordinator = RegistrationCoordinator(navigationController: self.navigationController?)
当然,假设您当前的视图控制器有一个导航 controller(并且您的协调器必须接受可选项)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.