关闭弹出框视图控制器 swift storyboard 后更新 tableView

Update tableView after dismissal of popover view controller swift storyboard

提问人:Peter Holdensgaard 提问时间:3/7/2021 更新时间:3/8/2021 访问量:281

问:

我有一个表格视图,这是一个足球比赛列表。在我的导航中,我有一个“加号”,我可以在其中添加新的匹配项。这以弹出框的形式呈现,效果非常好。虽然当我使用和应用对我的数据库的更改时。 表视图没有更新,我必须更改应用程序中的页面才能更新。'dismiss(animated: true, completion: nil)

在显示弹出窗口后更新我的表视图的任何建议?我尝试在viewDidAppear

iOS Swift iPhone UITableView

评论

0赞 mjoe7 3/8/2021
您是否尝试过在 TableViewController 的 ?self.tableView.reloadData()viewWillAppear
0赞 Peter Holdensgaard 3/8/2021
是的,这是行不通的。当我关闭弹出框时,它似乎没有被调用。

答:

0赞 Hetali Adhia 3/7/2021 #1

当您关闭弹出框控制器时,请检查哪个正在呈现视图控制器,如果它是要重新加载的带有表视图的 VC,然后在 popoverVC 的 viewWillDisappear 方法中重新加载表视图

class PopOverViewController {
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    if let tableVC = presentingViewController as? TableViewController {
        DispatchQueue.main.async {
            tableVC.tableView.reloadData()
        }
    }
}

评论

0赞 Peter Holdensgaard 3/7/2021
谢谢你的回答。虽然它不更新 tableView?但是,当我重写 viewWIllDisappear 时,它不包括 super.viewWillDisappear
0赞 Abv 3/8/2021 #2

如果要从核心数据数据库重新加载数据

我不知道您使用的是什么数据库,但我认为它是核心数据

如果是这种情况:

  1. create un Unwind Segue (控制将您用于关闭控制器的按钮拖动到控制器右上角的退出图标,为其提供标识符)。

  2. 将此代码添加到 TableView 控制器和 PopOverController 中

代码如下:

class TableViewController: UITableViewController {
    var matches = [Match](){ //Core Data object
        didSet {
        OperationQueue.main.addOperation { //reloading after adding a new match (safe)
                self.tableView.reloadData()
            }
        }
    }
    //...

    //this unwind function executes after dismissing your popover controller
    @IBAction func unwindToThemeList(sender: UIStoryboardSegue) {

        matches = //... retreive your data

        //this code works with var theme {didset} to make sure new matches are added
    }

}

class popoverController: UIViewController {

     //this section of code lets you do operations before dismissing the controller
     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

         guard let identifier = segue.identifier else { return }

         if identifier == TheNameYouGaveToYourIdentifier {
             //Do your saves
         }          
}

因此,当您按下按钮关闭时,它将触发展开 segue,首先进行覆盖准备,然后通过展开进行 segue。

pop viewController 中的 prepare 部分可让您进行保存

tableviewController 中的 unwind 部分允许您检索数据

然后要有效地重新加载,请使用 didst 部分

评论

0赞 Abv 3/11/2021
霍尔登斯加德@Peter,这个答案对你有帮助吗?