如何在 UITabBarController 中的视图控制器之间传递数据?

问题描述

我有两个问题。 我想传递数据。我有两个ViewControllers。 控制器 A 有数据,我想将它从 A 传递给 B 控制器。

首先 - 标签栏控制器有一个关系转场。我可以用这个吗?例如:执行转场还是准备?

第二 - 我想在 ViewControllers 中的 UITabBarController 之间传递数据 我不能这样做。我搜索了这个我找不到这个...

不知道是不是搜索词有误。你能告诉我怎么做或如何搜索吗?

解决方法

  1. 没有。一段关系并不是真正的转场。仅通过切换选项卡不会触发任何 segue。

  2. 你只需要把数据放在各种视图控制器可以找到的地方。如果您想通知其他视图控制器数据已更改,请使用通知或利用标签栏控制器委托知道用户何时切换标签栏项目这一事实。

,

不,如果两个 ViewController 连接到 TabbArController,则不能直接在它们之间传递数据。

如果你想你可以通过NotificationCenter进行管理(所以当有新的变化发生并且你发布通知时,它会自动刷新数据)

NotificationCenter.default.addObserver(
            self,selector: #selector(self.getData),name: .refreshAttendanceForSelectedDate,object: nil)

@objc func getData() {
/// perform task in view controller
}

// 在收到回复时发布更改....

NotificationCenter.default.post(name: Constants.Notification.refreshAttendanceForSelectedDate,object: nil)

或者 您可以通过创建单例对象将 DataStorgae 更新的数据传递到相应模型类型 (LocalCache) 的变量中。此变量将驻留在内存中,直到应用驻留在内存中。强制杀死应用程序或从内存中刷新应用程序后,此变量将自动删除。

注意:如果需要,请不要忘记设置值 nil。 (例如,注销操作)

class DataStorage {
    
    /// Created the singleton objectbas
    static let instance = DataStorage()
    
   /// Created the properties
    var notificationbadgeCount: Int?
    var configData: ConfigurationModel?    
}

按集合使用

DataStorage.instance.selectedStaffId = model.id

获取价值

if let id = DataStorage.instance.selectedStaffId {
/// Perform respective task ....
}