繁体   English   中英

使用协调器模式时无法显示下一个视图 controller

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM