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

Posted

技术标签:

【中文标题】在swift 3中的tableview中更新tableviewcell中的特定行?【英文标题】:Update particular row in tableviewcell in tableview in swift 3? 【发布时间】:2017-05-31 05:44:39 【问题描述】:

我在表格视图中使用 tableviewcell.xib。在那我有评论按钮,如果我点击它,我将导航到另一个页面,以便我可以评论,当我在评论后关闭时。它将来到 tableview 页面,因为我想更新评论计数值而不用 service call 更新。我应该在哪里添加此代码以更新单元格。请帮助我。

     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)

【问题讨论】:

编辑您的问题,了解您是如何移动到此评论屏幕的。您是否还更改了数据源,因为如果没有,那么重新加载行将无济于事。? 我也问过你的数据源数组,你也改了吗? @NiravD。我不明白你在问什么。我没有更改数据源中的任何内容 您正在使用数组在 tableView 中显示数据您是否更改了该数组以显示新的评论编号,否则如果您重新加载该行它将什么也不做 @NiravD 你说如果我在我的第 10 个帖子中更新完整数组意味着需要不断更新 【参考方案1】:

您需要做的是创建一个protocolUpdateCommentCount 并使用您的控制器实现该协议,然后在您的PostCommentViewController 中创建一个UpdateCommentCount 类型的实例属性。 , 同样在你的 tableController 中声明一个Int 类型的属性来保存点击行的引用。

protocol UpdateCommentCount 
    func updateComment(with count:Int)

现在用 yourController 实现这个 UpdateCommentCount 并添加一个 Int 属性来保存点击行的引用,并将其设置在您的按钮操作中,您将在其中展示您的 PostCommentViewController

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 的实例属性,然后在您成功发表评论后调用其委托方法。

var commentDelegate: UpdateCommentCount

成功发表新评论后致电updateComment

commentDelegate.updateComment(with: newCount)

【讨论】:

当我滚动 tableview 时,值正在恢复而不显示更新的值 @UmaMadhavi 您是否也更改了数组中的值,如果数组中的值正确更改,那么这不应该发生。【参考方案2】:

您可以使用 NSNotification。在该表视图的 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)

比在通知调用函数中重新加载表格视图。

【讨论】:

以上是关于在swift 3中的tableview中更新tableviewcell中的特定行?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 tableView 未在 reloadData() 上更新

Swift 3 和 Firebase - Tableview 未更新

使用数组中的新信息更新该对象并显示 tableview Swift

使用swift中的新元素更新tableview

登录时多个用户访问的核心数据值(iOS Swift)

Swift 3:Tableview 选择行转到不同的导航视图