这里的问题是,我在EditCommentVC
的当前上下文上以模式呈现CommentVC
,因为我想将UIView
的背景设置为半透明。现在,在EditCommentVC
上,我有一个UITextView
允许用户编辑他们的评论,还有两个按钮-cancel
(取消EditCommentVC
)和update
更新新评论并将其推送到数据库。
就代码而言,一切都在工作,除了新的注释被推送并且EditCommentVC
被取消之后,带有所有注释的UITableView
不会被重新加载以显示更新的注释。尝试从CommentsVC
调用它,但它不起作用。
在这种情况下,如何重新加载viewWillAppear()
中的数据?
@IBAction func updateTapped(_ sender: UIButton) {
guard let id = commentId else { return }
Api.Comment.updateComment(forCommentId: id, updatedComment: editTextView.text!, onSuccess: {
DispatchQueue.main.async {
let commentVC = CommentVC()
commentVC.tableView.reloadData()
self.dismiss(animated: true, completion: nil)
}
}, onError: { error in
SVProgressHUD.showError(withStatus: error)
})
}
UITableView
中转换的代码(并传递注释的CommentVC
)。id
符合通过该注释的CommentVC
的CommentActionProtocol
:extension CommentVC: CommentActionProtocol {
func presentActionSheet(for commentId: String) {
let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
let editAction = UIAlertAction(title: "Edit", style: .default) { _ in
self.performSegue(withIdentifier: "CommentVCToEditComment", sender: commentId)
}
actionSheet.addAction(editAction)
present(actionSheet, animated: true, completion: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "CommentVCToEditComment" {
let editCommentVC = segue.destination as! EditCommentVC
let commentId = sender as! String
editCommentVC.commentId = commentId
}
}
}
最佳答案
我在这里看到至少两个问题:
您正在创建一个新的CommentVC
,如果您想在现有的视图控制器中更新tableView
,则不应该这样做。
因为您已经提到Api.Comment.updateComment
是一个异步调用,所以需要编写UI代码以在主线程上运行。
所以首先需要在这个viewController中的变量中有commentVC
的实例。您可以将视图控制器的实例存储在显示此视图控制器的位置。
class EditCommentVC {
var commentVCdelegate: CommentVC!
// Rest of your code
}
现在,在显示编辑视图控制器时,需要在此变量中传递引用commentVC。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "CommentVCToEditComment" {
let editCommentVC = segue.destination as! EditCommentVC
let commentId = sender as! String
editCommentVC.commentId = commentId
editCommentVC.commentVCdelegate = self
}
}
现在需要使用此引用重新加载tableView。
Api.Comment.updateComment(forCommentId: id, updatedComment: editTextView.text!, onSuccess: {
DispatchQueue.main.async {
commentVCdelegate.tableView.reloadData() // - this commentVC must be an instance that you store of the your commentVC that you created the first time
self.dismiss(animated: true, completion: nil)
}
}, onError: { error in
SVProgressHUD.showError(withStatus: error)
})
关于ios - UIViewController被关闭时重新加载TableView?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51954283/