如何在更新容器 B 后重新加载容器 A?
How to reload Container A after update Container B?
我有一个 ViewController 包含 3 个 ContainerView 的分段控件。每个容器都是一个包含 table 视图的 ViewController。在 CV2 中,我可以选择一行。此行已从 CV2 中删除,应添加到 CV1 中。
在使用 Segmented Controller 之前,我使用了选项卡,table 每个选项卡上的视图都已正确更新。现在,有了 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)
请注意,您需要在 CV1 中使用一个名为 rowDeleted
的方法,或者您希望如何调用它。
此外,请确保在 CV1 的 deinit 中删除自己作为观察者的身份:
deinit {
NotificationCenter.default.removeObserver(self)
}
然后,当您在 CV2 中进行更新时,使用如下内容:
NotificationCenter.default.post(name: .rowDeleted, object: nil)
这一切都是假设您不需要传递实际对象,而只需要一个事件通知。对象传递有点不同,使用委托模式可以做得更好,但这是一个不错的开始。
如果您尝试调用 viewWillAppear(_:)
函数中存在的某些逻辑,为什么不将其提取到它自己的函数中,从 viewWillAppear(_:)
调用新函数,然后您可以调用当您转换容器视图时,该功能再次起作用。
所以在您的容器视图中,它现在看起来像这样。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
reloadDataModel()
}
func reloadDataModel() {
let recupListeBAddModel = RecupListeBAddModel()
recupListeBAddModel.delegate = self
recupListeBAddModel.downloadItems(id: idEtablissement)
self.ListeB.reloadData()
}
然后,在你的转换代码中,也许就在你的动画代码之前,你可以调用 listBOutlet.reloadDataModel()
,这样它就可以在动画进行时进行操作。
我有一个 ViewController 包含 3 个 ContainerView 的分段控件。每个容器都是一个包含 table 视图的 ViewController。在 CV2 中,我可以选择一行。此行已从 CV2 中删除,应添加到 CV1 中。
在使用 Segmented Controller 之前,我使用了选项卡,table 每个选项卡上的视图都已正确更新。现在,有了 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)
请注意,您需要在 CV1 中使用一个名为 rowDeleted
的方法,或者您希望如何调用它。
此外,请确保在 CV1 的 deinit 中删除自己作为观察者的身份:
deinit {
NotificationCenter.default.removeObserver(self)
}
然后,当您在 CV2 中进行更新时,使用如下内容:
NotificationCenter.default.post(name: .rowDeleted, object: nil)
这一切都是假设您不需要传递实际对象,而只需要一个事件通知。对象传递有点不同,使用委托模式可以做得更好,但这是一个不错的开始。
如果您尝试调用 viewWillAppear(_:)
函数中存在的某些逻辑,为什么不将其提取到它自己的函数中,从 viewWillAppear(_:)
调用新函数,然后您可以调用当您转换容器视图时,该功能再次起作用。
所以在您的容器视图中,它现在看起来像这样。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
reloadDataModel()
}
func reloadDataModel() {
let recupListeBAddModel = RecupListeBAddModel()
recupListeBAddModel.delegate = self
recupListeBAddModel.downloadItems(id: idEtablissement)
self.ListeB.reloadData()
}
然后,在你的转换代码中,也许就在你的动画代码之前,你可以调用 listBOutlet.reloadDataModel()
,这样它就可以在动画进行时进行操作。