弹出视图控制器时如何在UITableView中重新加载数据

时间:2019-06-28 03:00:40

标签: swift xcode uitableview viewcontroller

如果我有两个ViewControllers,其中一个包含UITableView,另一个包含更新tableView中的数据。弹出viewController并使用tableView返回视图时,如何重新加载表数据?

我已经尝试使用viewDidAppear

2 个答案:

答案 0 :(得分:1)

您可以像Rajesh建议的那样使用viewWillAppear:

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

或者您可以使用回调函数来传递数据并重新加载视图控制器1的表视图。

在ViewController 2中,定义您的回调函数:

// Callback function
var callbackResult: ((data) -> ())?

在调用ViewController 1之前先调用它

    callbackResult?(data)
    self.navigationController?.popViewController(animated: true)

在ViewController 1中,使用回调函数的闭包收集结果并重新加载tableView。例如,这可能在prepareForSegue内部发生:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "goToViewController2" {
        let destinationVC = segue.destination as! ViewController2
        // Set any variable in ViewController2
        destinationVC.callbackResult = { result in
        // assign passing data etc..
        self.tableView.reloadData()
        }
    }
 }

答案 1 :(得分:0)

您可以尝试执行以下操作:

class TableViewController: UITableViewController {

    func showUpdatingViewController() {
        let vc = UpdatingViewController()

        vc.onUpdate = { [weak self] in
            self?.tableView.reloadData()
        }

        navigationController?.pushViewController(vc, animated: true)
    }

}

class UpdatingViewController: UIViewController {

    var onUpdate: (() -> Void)?

    func updatesFinished() {
        onUpdate?()
        dismiss(animated: true, completion: nil)
    }

}