簡體   English   中英

如何以編程方式在 Xcode 中的視圖控制器之間移動用戶?

[英]How can I programatically move users between View Controllers in Xcode?

一旦用戶登錄到我的應用程序,下面的 function 應該會自動將用戶重定向到名為“TabViewController”的視圖 Controller。

transitionToHome() {
    
    let tabViewController = storyboard?.instantiateViewController(withIdentifier: Constants.Storyboard.TabViewController) as? TabViewController
    
    view.window?.rootViewController = tabViewController
    view.window?.makeKeyAndVisible()
    
}

目前,當這個 function 運行時,它只會產生一個全黑屏,而不是將用戶帶到 TabViewController。

這是我的 ViewController 的 Xcode 的屏幕截圖。

xcode圖片

這是我的“TabViewController.swift”文件中的代碼

import UIKit

class TabViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

}

這是我在“常量”文件中對 ViewController 的聲明

import Foundation

struct Constants {

struct Storyboard {
    
    static let homeViewController = "HomeVC"
    
    static let TabViewController = "TabVC"
  }
}

在解釋為什么會發生這種情況以及如何真正讓它重定向到 TabViewController 時,任何幫助將不勝感激,謝謝!

將 UITabViewController 設為初始視圖 Controller。 然后,在應用程序啟動后,檢查用戶是否在您的選項卡 controller 的第一個視圖 controller 中登錄。 如果不是,則以編程方式顯示登錄 controller。 當他們成功登錄時,關閉登錄 controller 回到第一個視圖 controller。

示例代碼(其中 HomeViewController 是選項卡控制器的第一個視圖 controller):

class HomeViewController: UIViewController {
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        if !userIsLoggedIn {
            presentLoginController()
        }
    }
    
    private var userIsLoggedIn: Bool {
        false // placeholder - need to compute this elsewhere, otherwise login controller will always present
    }
    
    private func presentLoginController() {
        guard let loginController = storyboard?.instantiateViewController(identifier: "LoginVC") else {
            return
        }
        
        loginController.modalPresentationStyle = .fullScreen
        
        present(loginController, animated: false)
    }
}

class LoginViewController: UIViewController {
    @IBAction func loginTapped(_ sender: Any) {
        if loginCredentialsCorrect {
            dismiss(animated: true)
        }
    }
    
    private var loginCredentialsCorrect: Bool {
        true // placeholder
    }
}

暫無
暫無

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

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