提问人:Peter Holdensgaard 提问时间:3/7/2021 更新时间:3/8/2021 访问量:281
关闭弹出框视图控制器 swift storyboard 后更新 tableView
Update tableView after dismissal of popover view controller swift storyboard
问:
我有一个表格视图,这是一个足球比赛列表。在我的导航中,我有一个“加号”,我可以在其中添加新的匹配项。这以弹出框的形式呈现,效果非常好。虽然当我使用和应用对我的数据库的更改时。
表视图没有更新,我必须更改应用程序中的页面才能更新。'dismiss(animated: true, completion: nil)
在显示弹出窗口后更新我的表视图的任何建议?我尝试在viewDidAppear
答:
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
如果要从核心数据数据库重新加载数据
我不知道您使用的是什么数据库,但我认为它是核心数据
如果是这种情况:
create un Unwind Segue (控制将您用于关闭控制器的按钮拖动到控制器右上角的退出图标,为其提供标识符)。
将此代码添加到 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,这个答案对你有帮助吗?
评论
self.tableView.reloadData()
viewWillAppear