swift - 更新容器 B 后如何重新加载容器 A?
问题描述
我有一个 ViewController 包含 3 个 ContainerViews 的分段控件。每个 Container 都是一个包含 tableView 的 ViewController。在 CV2 中,我可以选择一行。此行已从 CV2 中删除,应添加到 CV1 中。
在使用分段控制器之前,我使用了选项卡,并且每个选项卡上的表格视图都已正确更新。现在,使用 ContainerView,我不知道如何调用重新加载。这是我对段的操作:
@IBAction func bSegment(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
UIView.animate(withDuration: 0.0, animations: {
self.listBOutlet.alpha = 1
self.addBOutlet.alpha = 0
self.delBOutlet.alpha = 0
})
} else {
if sender.selectedSegmentIndex == 1 {
UIView.animate(withDuration: 0.0, animations: {
self.listBOutlet.alpha = 0
self.addBOutlet.alpha = 1
self.delBOutlet.alpha = 0
})
} else {
if sender.selectedSegmentIndex == 2 {
UIView.animate(withDuration: 0.0, animations: {
self.listBOutlet.alpha = 0
self.addBOutlet.alpha = 0
self.delBOutlet.alpha = 1
})
}
}
}
}
我尝试了很多这样的方法来访问 CV2 中的 viewWillAppear :
print(self.children)
var myClass : ListeBEtb = self.????
myClass.ListeB.reloadData()
myClass.viewWillAppear(false)
但我不知道如何调用 ListeBEtb (CV1) 来更新它。
在我的 CV2 中:
override func viewWillAppear(_ animated: Bool) {
let recupListeBAddModel = RecupListeBAddModel()
recupListeBAddModel.delegate = self
recupListeBAddModel.downloadItems(id: idEtablissement)
self.ListeB.reloadData()
}
你知道吗?
谢谢
解决方案
您有几种方法可以完成这项工作,最简单的方法是使用通知中心开始。
委托模式是另一种,RxSwift 也是另一种选择,等等。
为了使用通知中心,首先,定义一个扩展以便于通知处理:
extension Notification.Name {
static let rowDeleted = Notification.Name("rowDeleted")
}
之后,在 CV1 中订阅新创建的通知:
NotificationCenter.default.addObserver(self, selector: #selector(rowDeleted), name: .rowDeleted, object: nil)
请注意,您需要一个rowDeleted
在 CV1 中调用的方法,或者您想调用它。
此外,请确保在 CV1 的 deinit 上将自己移除为观察者:
deinit {
NotificationCenter.default.removeObserver(self)
}
然后,当您在 CV2 中进行更新时,请使用以下内容:
NotificationCenter.default.post(name: .rowDeleted, object: nil)
这一切都假设您不需要传递实际对象,而只需要一个事件通知。对象传递有点不同,委托模式做得更好,但这是一个不错的开始。
推荐阅读
- android - Kotlin Android 中未解决的参考文本
- c# - 在 Listview 上显示多个 JsonObject
- javascript - 开玩笑如何测试 setTimeout 中抛出的错误
- google-cloud-platform - 在哪里可以查看 Google 任务队列中已完成的任务?
- google-apps-script - 遍历行 - Google 表格 - 合并文档
- javascript - 如何找出加载 youtube 嵌入式 iframe 的时间
- linux - Docker 容器 - 如何将套接字文件的 GID 设置为 groupID 130?
- javascript - 我如何允许@onclick 处理 vueJs 中的多个事件并使组件停留在 v-if 上?
- python - python中扑克的同花顺和皇家同花顺
- csv - 使用 .bat 文件根据 .csv 文件中的值将文件移动到文件夹