swift - 我想从其他视图控制器(swift)中删除collectionview的单元格
问题描述
无论如何从另一个视图控制器删除collectionview中的单元格,我将数据从CollectionView Cell传递到另一个视图控制器。
我通过这种方式将数据传递给另一个视图控制器。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = storyboard?.instantiateViewController(withIdentifier: "addViewController") as! addViewController
vc.name = nameArr[indexPath.row]
vc.image = imgArr[indexPath.row]
self.navigationController?.pushViewController(vc, animated: true)
}
现在我被困住了,我不知道如何从 addViewController 中删除单元格,删除后返回到具有 UICollectionView 的 ViewController 并重新加载它。
像 Instagram 应用程序
解决方案
一个视图控制器不应该直接更新另一个视图控制器的模型和 UIKit 控件。当前的视图控制器应该负责这一点。当前视图控制器应该提供一些机制,以便其他视图控制器可以请求何时应该进行删除。
您可以通过闭包或委托协议模式来做到这一点。例如,如果你想使用闭包,你可以:
给出
AddViewController
删除对象的闭包:class AddViewController: UICollectionViewController { var onDelete: (() -> Void)? ... }
当您实例化视图控制器时,设置该闭包:
extension ViewController: UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let vc = storyboard?.instantiateViewController(withIdentifier: "addViewController") as! AddViewController let item = indexPath.item vc.name = nameArr[item] vc.image = imgArr[item] vc.onDelete = { [weak self] in self?.nameArr.remove(at: item) self?.imgArr.remove(at: item) collectionView.deleteItems(at: [indexPath]) } navigationController?.pushViewController(vc, animated: true) } }
当该视图控制器需要通知当前视图控制器它应该删除该数据时,它将调用该闭包:
class AddViewController: UICollectionViewController { ... @IBAction func didTapDeleteButton(_ sender: Any) { onDelete?() } }
推荐阅读
- javascript - 如何在反应端从 Node.js 设置具有自定义路径的 http Only cookie,我可以设置默认路径 http Only cookie 但无法保存自定义路径
- linux - 从 Debian 11 挂载到 Windows 10 不起作用
- c# - 使用 Scrutor 注册具有子接口类型的服务
- python - 编写一个计算文件中单词首字母出现频率的作业。因此,如果有三个以“c”开头的单词,则答案将是“c 3”
- solidity - 元掩码未连接到 localhost 8545
- woocommerce - 在 WPML 中获取原始版本的帖子 ID
- terraform - 如何在 Terraform 中提示用户信息以获取地图类型变量中的键
- android - 通过 Firebase 的时间戳在自定义信息窗口中显示最新信息
- ssas - 无法将 SSAS 服务器连接到 Power BI
- wordpress - 如何阻止某些标签在 WordPress 中创建