我有一个ViewController,它包含3个ContainerViews的分段控件。每个容器都是一个ViewController,其中包含一个tableView。在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中的viewwill:
            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 {
  NotificationCenter.default.removeObserver(self)
}

然后,在CV2中进行更新时,请使用以下内容:
NotificationCenter.default.post(name: .rowDeleted, object: nil)

这只是假设您不需要传递实际的对象,而只需要一个事件通知。对象传递与委托模式稍有不同,并且更好地完成,但这是一个不错的开始。

07-27 13:16