如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?
Posted
技术标签:
【中文标题】如何在由 UITabBarController 分隔的两个视图控制器之间传递数据?【英文标题】:how to pass data between two view controller that separated by UITabBarController? 【发布时间】:2018-12-26 07:13:13 【问题描述】:我想将User
数据(对象)从LoginVC
传递给HomeVC
,但是在这两个视图控制器之间,它被UITabBarController
和NavigationController
分开,如下图所示:
我想从这个 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和璧