关闭 viewController 后重新加载 tableView

2024-04-04

我有一个 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)
}

你可以通过两种方式做到这一点:-

1)
在 VCA 中做一件事

VCA

   override func viewWillAppear(_ animated: Bool){
       tableView.reloadData()
   }

如果这不起作用,请尝试此操作。

2) 在 VCB 中创建一个 VCA 实例,每当从 VCA 移动到 VCB 时,将 VCA 的值传递给 VCB 实例,然后从那里重新加载表。

VCB

    var instanceOfVCA:VCA!    // Create an instance of VCA in VCB

   func saveButton(){
    instanceOfVCA.tableView.reloadData()  // reload the table of VCA from the instance
    dismiss(animated: true, completion: nil) 
  }

VCA

 override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
  VCB.instanceOfVCA = self   // Pass the value of VCA in instance of VCB while navigating through segue
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关闭 viewController 后重新加载 tableView 的相关文章

随机推荐