如何以编程方式在 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)
如何以编程方式在视图控制器之间传递数据?我想将我的UITextfield数据传递给另一个视图控制器[重复]
以编程方式设置 rootViewController 不起作用,仅在 Xcode 11 中从情节提要中选择初始视图控制器