我有一个 ViewController(VCA),里面有一个 TableView。从这个 ViewController 可以调用另一个 ViewController (VCB)。在第二个 VC 中,可以向 plist 添加一个项目,用于填充 VCA 中的 TableView。问题是,当我保存新项目并关闭 VCB 时,我无法在 VCA 中重新加载 TableView。
我找了很多例子:
在 Swift 中关闭模态呈现的视图控制器后,如何重新加载 ViewController? https://stackoverflow.com/questions/28706877/how-can-you-reload-a-viewcontroller-after-dismissing-a-modally-presented-view-co
在swift中调用dismissViewController后如何调用重新加载表视图? https://stackoverflow.com/questions/31684954/how-to-call-reload-table-view-after-you-call-dismissviewcontroller-in-swift
如何在 swift 中从另一个视图控制器重新加载 tableview https://stackoverflow.com/questions/25921623/how-to-reload-tableview-from-another-view-controller-in-swift
添加项目后更新 TableViewController 的数据 https://stackoverflow.com/questions/33161429/update-the-data-of-a-tableviewcontroller-after-add-item
关闭 Popover 后更新第一个视图 https://stackoverflow.com/questions/42661129/update-the-first-view-after-dismissing-popover
关闭弹出窗口后表视图没有更新? https://stackoverflow.com/questions/37119298/table-view-is-not-getting-updated-after-dismissing-the-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()
}
但这行不通。我不
明白我错在哪里。可以
你帮我?
编辑:我的解决方案我是这样解决的:
我创建了一个单例,在其中声明:
class DataManager {
static let shared = DataManager()
var firstVC = VCA()
.....
}
then, 在VCA的viewDidLoad中:
DataManager.shared.firstVC = self
now, 在VCB的saveButton中, 我可以打电话:
@IBAction func saveButton(_ sender: Any) {
........
DataManager.shared.firstVC.tableView.reloadData()
dismiss(animated: true, completion: nil)
}