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