Swift 3:将数据从 TabBarController 传递到子视图控制器

Posted

技术标签:

【中文标题】Swift 3:将数据从 TabBarController 传递到子视图控制器【英文标题】:Swift 3: Passing Data From TabBarController to Child View Controllers 【发布时间】:2017-01-25 23:02:12 【问题描述】:

我正在尝试使用自定义“用户”类创建一个包含登录逻辑的 ios 应用程序,该类包含应用程序为特定用户所需的所有信息。我的应用程序还有一个用于主界面的标签栏控制器。但是,我很难弄清楚如何将登录的“用户”从登录屏幕传递到选项卡栏控制器,然后再传递到相应的子视图控制器。请注意,我的每个选项卡还需要一个导航控制器。我目前的逻辑如下:

LoginViewController.swift:

class LoginViewController: UIViewController 

    ...

    func displayRideFinishedSurvey(loggedInUser: User) -> Void  //user provided valid credentials, time to login
        let sb = UIStoryboard(name: "SuccessfulLogin", bundle: Bundle.main)
        let cc = (sb.instantiateViewController(withIdentifier: "tabBarStoryboard")) as! MyTabBarController
        cc.loggedInUser = loggedInUser // will be configured here for the entire app
        present(cc, animated: true, completion: nil)
    

MyTabBarController.swift:

import UIKit

class MyTabBarController: UITabBarController 

    var loggedInUser: User?

    override func viewDidLoad() 
        ...
    

MyAccountViewController.swift:

import UIKit

class MyAccountViewController: UIViewController 

    var loggedInUser: User?

    override func viewDidLoad() 
        ...
    

可以看到下面的屏幕截图来表示情节提要设置:(有多个选项卡,只是一个示例)

根据提供的信息:在 MyAccountViewController 中设置“loggedInUser”变量的最佳方法是什么?

【问题讨论】:

【参考方案1】:

几个选项: 1.使用 NSUserDefault 将数据持久化到存储中。 2.创建一个单例。 3.全局变量 你可以选择任何你想要的。

【讨论】:

您认为以上哪种方案最专业/最高效? @JustinFrazer 我认为最简单的方法是在子视图控制器类中创建一个公共变量。在显示子视图控制器之前,请相应地设置 var。

以上是关于Swift 3:将数据从 TabBarController 传递到子视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:将数据从 TabBarController 传递到子视图控制器

Swift 3 - 将数据从一个视图传递到另一个视图

使用 Swift 3 将数据从 Modal Viewcontroller 传递到 rootController(不要 Segue)

如何在 swift 3 中从核心数据中删除对象

如何使用 SWrevaelviewController swift 3 将数据从 tableview 的特定行传递到另一个视图控制器

Swift:如何将数据从 TableViewController 传递到 Details VC