首页 > 解决方案 > 如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?

问题描述

我想从 to 传递数据User(对象),但是在这两个视图控制器之间,它被分隔,如下图所示:LoginVCHomeVCUITabBarControllerNavigationController

我想User从这个 loginVC 传递数据。从这个 loginVC 中,它将推动 seguemain.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)
    }



}

标签: iosswiftuinavigationcontrolleruitabbarcontroller

解决方案


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

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

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

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


推荐阅读