在 swift 3 的 tableview 中更新 tableviewcell 中的特定行?

Update particular row in tableviewcell in tableview in swift 3?

我在 table 视图中使用 tableviewcell.xib。因为我有评论按钮,如果我点击它,我将导航到另一个页面以便我可以评论,当我在评论后关闭时。它将进入 table 查看页面,因为我想更新评论计数值而不更新服务调用。我应该在哪里添加这个代码来更新cell.Please帮助我。

     let indexPath = IndexPath(item: sender.tag, section: 0)  
self.tableView.reloadRows(at: [indexPath], with: .automatic)

我是这样导航的

    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
    self.present(commentPage, animated: false, completion:nil)

您可以使用 NSNotification。在 table 视图的 viewDidLoad 方法中注册通知。比在呈现视图之前发送通知,如下所示..

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
NotificationCenter.default.post(name: Notification.Name(rawValue: myNotificationKey), object: self)
    self.present(commentPage, animated: false, completion:nil)

在通知调用函数中重新加载table视图。

你需要做的是制作一个像 UpdateCommentCountprotocol 并在你的控制器中实现该协议,然后在你的 [=17= 中有这个 tableView ] 创建一个 属性 类型 UpdateCommentCount 的实例,也在你的 tableController 中声明一个 属性 类型 Int 来保存点击行的引用。

protocol UpdateCommentCount {
    func updateComment(with count:Int)
}

现在用你的控制器实现这个 UpdateCommentCount 并添加一个 Int 属性 来保存点击行的引用,并将它设置在你展示 [=17] 的按钮操作中=]

class YourController: UIViewController, UpdateCommentCount, UITableViewDelegate, UITableViewDataSource {

    var currentCommentRow = 0

    //Your other methods

    func commentButtonAction(_ sender: UIButton) {
        currentCommentRow = sender.tag
        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
        let commentPage = storyBoard.instantiateViewController(withIdentifier: "postCommentsPage") as! PostCommentViewController
        commentPage.commentDelegate = self
        self.present(commentPage, animated: false, completion:nil)
    }

    func updateComment(with count:Int) {
        let dic = yourArray[self.currentCommentRow]
        dic["commentCount"] = count
        yourArray[self.currentCommentRow] = dic
        let indexPath = IndexPath(item: self.currentCommentRow, section: 0)  
        self.tableView.reloadRows(at: [indexPath], with: .automatic)
    }

现在在 PostCommentViewController 中声明一个名为 commentDelegate 类型 UpdateCommentCount 的实例 属性,当您成功 post 评论时只需调用它的委托方法。

var commentDelegate: UpdateCommentCount

成功 post 新评论后调用 updateComment

commentDelegate.updateComment(with: newCount)