如何在提交swift中模式存在的类型的页面后重新加载表视图



我的应用程序中有一个发布评论系统。用户点击reviewTableViewController中的review按钮,弹出一个当前模式页面,即postReviewController,他可以发布评论。在用户单击发送按钮后,我确定当前页面将被模式化地驳回,但现在用户刚刚写的帖子不会显示,直到我退出reviewTableViewController并再次打开它。

在关闭当前modally页面后,如何重新加载表视图?

我在点击reviewBtn时尝试了解除方法,但这取消了我需要执行的所有代码。

我的代码:

@IBAction func ReviewBtn(_ sender: Any) {




db.collection("Reviews").addDocument(data:[
//my code here
]){ err in
if let err = err {
print("Error writing document: (err)")
} else {

let messageVC = UIAlertController(title: 
"Review submitted successfully!", message: "" , preferredStyle: .actionSheet)
self.present(messageVC, animated: true) {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
messageVC.dismiss(animated: true) {
self.dismiss(animated: true, completion: nil)


}
}
}

}



}

}

对此有什么帮助或建议吗?

您可以在所提供的控制器中创建协议和协议的对象,如下所示

protocol DismissView{
func updateTblData()
}
var delegate: DismissView?

当您关闭视图时,调用委托的方法如下:

if let delegate = delegate {
delegate.updateTblData()
}

现在,在您显示屏幕的控制器中,请遵守协议并提供方法的定义。

此外,在出示控制器时,请将代表分配给自己,如下所示:

secondController.delegate = self

您展示的屏幕可能如下所示:

class FirstViewController: UIViewController , DismissView {
@IBOutlet weak var tbl: UITableView!

override func viewDidLoad() {
super.viewDidLoad()

}

@IBAction func click(_ sender: Any) {
let controller = storyboard?.instantiateViewController(identifier: "new") as! NewViewController
controller.delegate = self
present(controller, animated: true)
}
func test() {

tbl.updateTblData()
}
}

基本上有两种方法可以做到这一点。

  1. 使用委托:其思想是PostReviewController应该调用ReviewTableViewController中的方法,而不是仅将其自身驳回。在这种情况下,ReviewTableViewController实例将关闭PostReviewController控制器,并在关闭调用完成时调用reloadData。(只需在swift中搜索代表,你就会找到很多解决方案,帮助你解决问题。

  2. 使用闭包:基本上,您可以将闭包从ReviewTableViewController传递到PostReviewController。在该闭包中,您将在完成时调用disease和reloadData,并且您的PostReviewController实例将调用该闭包,而不是自行解除。

p.S.检查解雇的文档(动画:完成:(。理想情况下,呈现视图控制器应负责驳回其呈现的视图控制器

最新更新