解除viewController后重新加载tableView

Giu*_*ala 7 uitableview uiviewcontroller ios

我有一个带有TableView的ViewController(VCA).从这个ViewController可以调用另一个ViewController(VCB).在第二个VC中,可以将项添加到用于在VCA中填充TableView的plist中.问题是,当我保存新项目并关闭VCB时,我无法在VCA中重新加载TableView.

我找到了很多例子:

如何在Swift中解除模态显示的视图控制器后重新加载ViewController?

在swift中调用dismissViewController后如何调用重载表视图?

如何从swift中的另一个视图控制器重新加载tableview

添加项目后更新TableViewController的数据

解雇Popover后更新第一个视图

在解除弹出窗口后,表视图没有得到更新?

看完之后我尝试了这段代码:

    **IN VCB**

import UIKit 

protocol AddItemDelegateProtocol {
    func didAddItem()
}

class VCB: UIViewController {

    var delegate : AddItemDelegateProtocol?
    ...
}

@IBAction func saveButton(_ sender: Any) {
        .... 
   self.delegate?.didAddItem()
   dismiss(animated: true, completion: nil)     
   }



**In VCA**

class VCA: UIViewController, UITableViewDelegate, UITableViewDataSource, AddItemDelegateProtocol {

let addItemVC = VCB()
...

override func viewDidLoad() {
        super.viewDidLoad()

        addItemVC.delegate = self
        ...
    }

func didAddItem() {
        self.tableView.reloadData()
    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我不明白我哪里错了.你可以帮帮我吗?

编辑:我的解决方案 我这样解决了:

我已经创建了一个单例,我在其中声明:

    class DataManager {

        static let shared = DataManager()
        var firstVC = VCA()
.....
}
Run Code Online (Sandbox Code Playgroud)

然后,在VCA的viewDidLoad中:

DataManager.shared.firstVC = self
Run Code Online (Sandbox Code Playgroud)

现在,在VCB的saveButton中,我可以调用:

@IBAction func saveButton(_ sender: Any) {
    ........
    DataManager.shared.firstVC.tableView.reloadData()
    dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

Ara*_*A R 0

在这里,当视图控制器尚未显示时,您将调用表的重新加载数据。即,即使在您关闭视图控制器 VCB 并显示视图控制器 VCA 之前,您也正在调用 reloadData。尝试在VCA的函数中调用reload data viewWillAppear(animated: Bool)