如何以编程方式在 Xcode 中的视图控制器之间移动用户?

Posted

技术标签:

【中文标题】如何以编程方式在 Xcode 中的视图控制器之间移动用户?【英文标题】:How can I programatically move users between View Controllers in Xcode? 【发布时间】:2021-02-26 16:10:08 【问题描述】:

一旦用户登录到我的应用程序,下面的函数会自动将用户重定向到名为“TabViewController”的视图控制器。

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

目前,当这个函数运行时,它只是产生一个全黑屏,而不是把用户带到 TabViewController。

这是我的 ViewController 的 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,谢谢!

【问题讨论】:

将此用于窗口:UIApplication.shared.windows.first?.rootViewController = tabViewController UIApplication.shared.windows.first?.makeKeyAndVisible() @RajaKishan 所说的会起作用,但您也可以创建一个新的TabViewController 对象并将其作为 rootViewController 传入。 不太确定上面的代码需要添加到哪里? Raja 能详细说明一下吗? 【参考方案1】:

使 UITabViewController 成为初始视图控制器。然后,在应用程序启动后,检查用户是否在选项卡控制器的第一个视图控制器中登录。如果不是,则以编程方式显示登录控制器。当他们成功登录后,将登录控制器解散回第一个视图控制器。

示例代码(其中 HomeViewController 是选项卡控制器的第一个视图控制器):

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
    

【讨论】:

以上是关于如何以编程方式在 Xcode 中的视图控制器之间移动用户?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode - 我如何以编程方式在容器视图中嵌入/更改视图控制器?

如何在视图控制器中以编程方式切换视图? (Xcode,iPhone)

xcode/ios:以编程方式推送视图控制器并传递行信息

如何以编程方式在视图控制器之间传递数据?我想将我的UITextfield数据传递给另一个视图控制器[重复]

以编程方式设置 rootViewController 不起作用,仅在 Xcode 11 中从情节提要中选择初始视图控制器

如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作