【问题标题】:Is it possible to transfer data retrieved from Firebase in the tab bar controller class from the tab bar controller to a view controller? Xcode, Swift是否可以将标签栏控制器类中从 Firebase 检索到的数据从标签栏控制器传输到视图控制器? Xcode,斯威夫特
【发布时间】:2021-09-12 04:48:57
【问题描述】:

所以,当用户从登录页面移动到主页时,我想在与标签栏控制器关联的视图控制器中预取一些所需的数据(标签栏控制器存在于这两个视图控制器之间)。我在自定义 TabBarController 类中获取数据并使用以下代码发送它(不起作用):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
    if segue.destination is Profile { // Profile = one of the view controllers in the tab bar
            let vc = segue.destination as? Profile
            vc?.uid = self.userID
            vc?.name = self.name
            vc?.skills = self.skillSet
    }
    
}

最好的方法是什么?请注意,我无法在标签栏控制器之前预取数据,因为那是登录页面。如果我在主页(标签栏控制器 {home, search, profile})上预取配置文件页面数据,如何将其传输到同一标签栏中的另一个视图控制器(到配置文件)?

【问题讨论】:

    标签: ios swift xcode uitabbarcontroller


    【解决方案1】:

    最好的方法是什么?

    • 我相信一旦您执行登录调用(在登录屏幕内),您将拥有与该用户相关的用户 ID 和其他数据,因此在登录控制器中您添加了将 Tabbar 控制器作为初始控制器的代码。

    • 因此,最好的办法是将 userData 存储到标签栏控制器中

    • 因此,一旦您将数据放入标签栏控制器(从登录或主屏幕),您就可以通过以下代码在标签栏内的任何根控制器(主页、搜索、配置文件)中获取用户数据。

    struct User { var userID: String? }

    class TabbarController: UITabBarController {
        var userData: User
    }
    
    class HomeController: UIViewController {
     var userData: User?
       override func viewWillAppear(_ animated: Bool) {
           if let tabBar =  self.tabBarController as? TabbarController {
            self.userData = tabBar.userData
           }
       }
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过多种方式实现这一目标。

      1. 使用 SuperViewController,
      2. 如果您想在 TabbarViewVontroller 子类之外访问,请使用 SingleTone 类。
      3. 如果数据很小,则保存在常用位置,例如常量。
      4. 在一个 VC(例如 Home)中预取数据,然后在点击时传递给所需的 VC。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-03
        • 2013-07-18
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        相关资源
        最近更新 更多