这里的问题是,我在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符合通过该注释的CommentVCCommentActionProtocol
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/

10-13 03:50