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

How to pass data between View Controllers in UITabBarController?

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

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

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

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

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

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

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

如果你想你可以通过NotificationCenter管理(这样当一个新的变化发生并且你post通知时,它会自动刷新数据)

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

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

// post 收到响应后的变化....

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

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

注意:如果需要,请不要忘记将值设置为零。 (例如,关于注销操作)

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 ....
}