【问题标题】:how to pass data between two view controller that separated by UITabBarController?如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?
【发布时间】:2018-12-26 07:13:13
【问题描述】:

我想将User 数据(对象)从LoginVC 传递给HomeVC,但是在这两个视图控制器之间,它被UITabBarControllerNavigationController 分开,如下图所示:

我想从这个 loginVC 传递User 数据。从这个 loginVC 中,它会将 segue 推送到main.storyboard,如下图所示

这里是包含标签栏控制器的main.storyboard,在第一个标签栏(索引= 0)是HomeVC所在的位置,我把homeVC放在Home.storyboard

这里是Home.storyboard,在我最终到达 HomeVC 之前有导航控制器。

那么如何将数据从 LoginVC 传递到 HomeVC?看来我必须从以下位置传递数据:LoginVC -> TabBarController -> NavigationController -> HomeVC

我该怎么办?

用户数据如下所示:

struct User {
    var username : String
    var firstName: String
    var lastName: String
    var userCode : String
    var address: String
    var phoneNumber: String
    var dateOfBirth: String
    var outlet : Outlet // custom object

    init (dictionary: [String:Any]) {
        username = dictionary["user_name"] as? String ?? ""
        firstName = dictionary["customers_firstname"] as? String ?? ""
        lastName = dictionary["customers_lastname"] as? String ?? ""
        userCode = dictionary["kode_customer"] as? String ?? ""
        address = dictionary["alamat_user"] as? String ?? ""
        phoneNumber = dictionary["customers_telephone"] as? String ?? ""
        dateOfBirth = dictionary["customers_dob"] as? String ?? ""
        outlet = Outlet(dictionary: dictionary)
    }



}

【问题讨论】:

  • 您是如何导航到 LoginVC 到 mainTabbarVC 的,您可以发布代码
  • 不要从多个控制器传递User 数据,而是将User 数据存储在UserDefault 中,然后在您想要的控制器中访问这些数据。

标签: ios swift uinavigationcontroller uitabbarcontroller


【解决方案1】:

UITabBarController 维护视图控制器的数组,按标签索引的顺序排列。

https://developer.apple.com/documentation/uikit/uitabbarcontroller/1621185-viewcontrollers

同样的方式 UINavigationController 也维护控制器堆栈。

所以您只需要从数组中获取视图控制器的对象(通过类型转换)并传递数据。

【讨论】:

    【解决方案2】:

    用户数据是导入的,你应该考虑将用户数据保存在本地文件中,然后你就可以到处获取用户数据了。

    【讨论】:

      【解决方案3】:

      UITabBarController 类包含一个 ViewControllers 数组。

      您可以在 UITabBarController 内的任何视图控制器中使用普通索引访问第一个 ViewContoller:

      self.tabBarController?.viewControllers[0]
      

      【讨论】:

        猜你喜欢
        • 2021-06-06
        • 2012-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多