我正在嘗試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()
}
uj5u.com熱心網友回復:
@objc func registrationButtonPressed() { registrationCoordinator = RegistrationCoordinator(navigationController: UINavigationController()) registrationCoordinator?.start() }
當您呼叫協調器時,您正在實體化導航控制器。然后你正在使用你的導航控制器來推送一個視圖控制器,但是你的導航控制器不在視圖層次結構中,不在主視窗中,不在其他視圖中。
換句話說,您的導航控制器存在,但不是界面的一部分。因此,它所做的任何事情都不會被顯示出來。
您沒有傳遞在 SceneDelegate 中使用的相同導航控制器,而是在創建一個新控制器。
您可以將當前視圖控制器的導航控制器傳遞給協調器。
registrationCoordinator = RegistrationCoordinator(navigationController: self.navigationController?)
當然,假設您當前的 viewcontroller 有一個導航控制器(并且您的協調器必須接受可選項)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/480644.html
