ios - 如何在另一个 UIViewController 中编辑 UICollectionView 项?

标签 ios swift uicollectionview edit master-detail

我正在使用带有 Swift 的主从 View Controller 。 当我单击主单元格时,我会看到一个包含图片列表的 Collection View 。 每张图片代表存储在 Core Data 中的数据。 每张图片数据都有一个时间戳,并且同一天拍摄的所有图片都存储在同一个主单元中。

[Date of the day 1]
   [pic1]
   [pic2]

[Date of the day 2]
   [pic3]
   [pic4]

我想要实现的是: 当我单击图片时,会显示另一个 ViewController(通过 segue),并且这个新的 VC 允许我编辑图片并更改其日期。

问题是,当我更改日期或图片时,这里会发生多件事:

  • 如果照片集中只有这张照片,那么我还必须删除 Master Day 单元格。
  • 如果图片不是单独的,我只需要更新详细 Collection View
  • 在任何情况下,如果我必须创建新的一天,我需要创建新的主单元并更新 View ,如果我需要删除一天,我还必须更新主视图。

如果您编辑集合项目,您只需执行以下操作:

self.collectionView performBatchUpdates:

然后更新模型,并通知 Collection View 您的操作... 但我不知道如何从另一个 UIViewController 做到这一点。

目前,在编辑 View Controller 中,我更新模型,然后关闭 View Controller 。我遇到了崩溃,因为 collectionView 尝试显示不再属于当前集合的项目...

为了解决这个问题,也许我可以使用一个协议(protocol)来从编辑 View 通知详细 View ,但是如果我这样做,我需要将编辑单元格的 IndexPath 提供给编辑 View ,然后将其返回通过协议(protocol)查看详细信息...为什么不呢。但在我看来并不是那么干净。

另一个问题是,当我删除一天时,应用程序似乎也在主视图中崩溃。因为,主视图不知道我从编辑 View 中删除了一天。

我的主要问题是,我不知道如何告诉我的主视图 Controller 我做了一些模型更改......特别是当我在编辑 View 中没有任何 IndexPath 信息时。

从技术上讲,我猜我可以使用 notificationCenter 来通知两个 View ...但是,我仍然需要将两个 IndexPath 从主视图传递到详细 View ,然后传递到编辑 View 。

丑陋。

最佳答案

实现这一目标的几种方法:

1)委托(delegate):包含 Collection View 的 View Controller 将充当编辑 View Controller 的委托(delegate),编辑完成后它将回调一个方法到“包含 Collection View 的 View Controller ”

2) 通知:编辑完成

3) block

关于ios - 如何在另一个 UIViewController 中编辑 UICollectionView 项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30937053/

相关文章:

ios - 检查当前的 rootViewController 是什么?

objective-c - 如何在 Swift 中从 error.userInfo 获取 ["error"] ["type"]?

ios - 如何调整图像大小以适应 tableview 单元格中的 UIImageview

ios - 如何查看一个 NSArray 是否包含另一个 NSArray 中的所有对象?

ios - 如何从我的 native iOS 应用程序在 SnapChat 上共享图像?

ios - 按下 View Controller 时,UINavigationItem 的标题消失

swift - PageTabBarController Material 不像 rootviewcontroller

ios - Collection View 树表示

Swift UITableViewCell subview 不注册点击

ios - Collection View 单元格内容自动布局