【问题标题】:Update tableView after dismissal of popover view controller swift storyboard关闭弹出视图控制器快速故事板后更新tableView
【发布时间】:2021-06-05 11:51:57
【问题描述】:

我有一个表格视图,它是足球比赛的列表。在我的导航中,我有一个“加号”符号,我可以在其中添加新的匹配项。这是一个弹出窗口,它工作得很好。虽然当我使用 dismiss(animated: true, completion: nil) 并将更改应用到我的数据库。 表格视图没有更新,我必须更改应用程序中的页面才能使其更新。 '

在显示弹出框后更新我的 tableview 有什么建议吗?我试过更新viewDidAppear中的tableview

【问题讨论】:

  • 您是否尝试在 TableViewController 的 viewWillAppear 中添加 self.tableView.reloadData()
  • 是的,这不起作用。当我关闭弹出框时,它似乎没有被调用。

标签: ios swift iphone uitableview


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。虽然它不更新tableView?但是,当我覆盖 viewWIllDisappear 时,它不包括 super.viewWillDisappear
【解决方案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
         }          
}

所以当你按下按钮关闭时,它会触发 unwind segue,首先通过 override prepare 然后通过 unwind for segue。

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

tableviewController 中的展开部分可让您检索数据

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

【讨论】:

  • @Peter Holdensgaard 这个答案对你有帮助吗?
猜你喜欢
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
相关资源
最近更新 更多