簡體   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