如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?

Posted

技术标签:

【中文标题】如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?【英文标题】:how to pass data between two view controller that separated by 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 中,然后在您想要的控制器中访问这些数据。 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

UITabBarController 类包含一个 ViewControllers 数组。

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

self.tabBarController?.viewControllers[0]

【讨论】:

以上是关于如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?的主要内容,如果未能解决你的问题,请参考以下文章

UITabBarController 与我的 splashsceen 并行运行

如何使屏幕仅垂直。 (UITabBarController/Swift)

故事板:如何在由 UINavigationViewController 控制的 UITableViewController 底部设置 UIToolbar

c_cpp Ñ个作业{1,2,...,N}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工.M1和M2加工作业我所需的时间分别为AI和璧

OpenGL如何检查一个点是不是在由伯恩斯坦曲线组成的区域内

如何获取现有的 UITabBarController 实例?