ios - 如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?
问题描述
我想从 to 传递数据User
(对象),但是在这两个视图控制器之间,它被分隔,如下图所示:LoginVC
HomeVC
UITabBarController
NavigationController
我想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)
}
}
解决方案
UITabBarController 按照标签索引的顺序维护视图控制器的数组。
https://developer.apple.com/documentation/uikit/uitabbarcontroller/1621185-viewcontrollers
同样的方式 UINavigationController 也维护控制器堆栈。
所以你只需要从数组中获取视图控制器的对象(通过类型转换)并传递数据。
推荐阅读
- node.js - Skype 面试 API
- python - 我正在尝试根据一些规则将字典键与其值匹配,而不使用其他库
- graphql - 在缓存重定向中找不到缓存键
- symfony - 在 Symfony 中使用登录详细信息自动回复
- azure - 如何将容器 blob 下载到 Azure 应用服务 wwwroot?
- scala - 参数 P 的隐含值在哪里:cats.Parallel[cats.effect.IO,F]
- google-cloud-platform - GCP Composer(气流)运算符
- c++ - CryptQueryObject 系统地下降
- javascript - 有条件地解构对象(javascript)
- javascript - SDK 组件的 Cordova 许可协议