簡體   English   中英

如何從未連接到其他視圖控制器的視圖控制器傳輸回視圖控制器?

[英]How do I transfer back to a view controller from a view controller that is not connected to other view controllers?

我正在開發一個 iOS 應用程序,它的視圖控制器沒有連接到其他視圖控制器。 目前我正在嘗試讓一個按鈕從用戶登錄后實例化的主視圖控制器傳輸回登錄/注冊視圖控制器。用戶登錄后實例化的視圖控制器未連接到其他視圖控制器。 我到達未連接的視圖控制器的方式是

func transitionToHome() { let homeViewController = storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewControllers) as? homeViewController

view.window?.rootViewController = homeViewController
view.window?.makeKeyAndVisible()}

我還包括視圖控制器的圖像,以便更容易理解我如何設置視圖控制器的照片

我嘗試連接“注銷”按鈕以轉換回登錄/注冊視圖控制器,但這會導致出現一個單獨的、較小的場景,我只需輕掃即可返回主視圖控制器。 我也嘗試使用上面的代碼傳輸回登錄/注冊視圖控制器,但這導致了同樣的問題。

看起來您需要將 view.window?.rootViewController 重置為登錄/注冊視圖控制器。 像這樣的東西

view.window?.rootViewController = LoginViewController()
view.window?.makeKeyAndVisible()}

盡管您可以在應用程序啟動后交換 rootViewController,但排列視圖控制器可能會更簡單,以便它們都鏈接回單個 rootViewController。

如果您希望在應用程序的后續啟動時跳過初始登錄屏幕,那么您可以將登錄視圖控制器設為 rootViewController,並在不需要登錄時直接跳轉到主視圖控制器的 viewDidAppear()。 然后你可以放松“注銷”的segue。

在應用程序委托中:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let loginViewController = UIStoryboard(name: "Login", bundle: nil).instantiateInitialViewController()
    self.window?.rootViewController = loginViewController
    self.window?.makeKeyAndVisible()
}

然后在 LoginViewController 中:

func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if alreadyAuthenticated {
        performSegue(withIdentifier: SegueIdentifier.goToMain, sender: self)
    }
}

根據您的具體需求,其他類似的組合也是可能的。 可能有一些好處,因為您可以訪問默認演示文稿並關閉動畫,如果您正在交換 rootViewController,這將更難實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM