【问题标题】:Observe value change from Cell to ViewController Swift观察从 Cell 到 ViewController Swift 的值变化
【发布时间】:2019-11-07 10:53:15
【问题描述】:

我遇到了麻烦,因为我在 CollectionView 中有一个 TableView,而且我不知道一旦用户单击它 (didSelectItemAt) 后如何传递我的 CollectionViewCell 中的当前数据。

所以我想知道是否有一种方法可以观察变量内部发生变化的值。

例如。当用户单击单元格时,将使用该单元格中包含的当前数据更新一个变量,然后我在 ViewController 中收到更新,一旦观察到值更改,将调用一个函数来更新其中的一些值.

谢谢!

【问题讨论】:

  • 对您的描述有点困惑,因为不确定您指的是哪种类型的单元格,但要从嵌入式UITableViewCell 传递信息,请使用由适当的简单协议支持的委托模式。您作为委托目标注入的内容将取决于您想要实现的目标。您可以使用CollectionViewCellCollectionView,甚至可以返回ViewController。对于“CollectionViewCell”以外的任何内容,您可能需要将某种形式的唯一 ID 嵌入到您的 TableViewCell 中,这样您就可以确定委托调用的来源。
  • 基本上我在 CollectionView 中有一个 TableView。由于单击 CollectionViewCell 后我无法调用“当前”来打开视图控制器,因此我希望使用一些观察者将一些数据传递回视图控制器。现在好点了吗?
  • 你看过UICollectionViewDelegate协议和collectionView(UICollectionView, didSelectItemAt: IndexPath)方法吗?
  • 是的,但事实是,作为 'collectionView(UICollectionView, didSelectItemAt: IndexPath)' 它没有在 ViewController 中调用,但在 TableViewCell 中我不能使用“present”打开一个新的 ViewController
  • 还是不清楚是要响应tableViewCell还是collectionViewCell中的动作?

标签: swift observable rx-swift


【解决方案1】:

我发现听到变化的最佳方法是使用 NotificationCenter:

NotificationCenter.default.post(name: Notification.Name("aNotificationName"), object: nil)

然后从我的控制器:

NotificationCenter.default.addObserver(self, selector: #selector(handleNotificationFuncName, name: NSNotification.Name(rawValue: "aNotificationName"), object: nil)

【讨论】:

  • 这远非“最好的方式”。为此目的使用回调或委托。
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多