iOS TableView如何更新TableView中的元素

时间:2018-08-26 00:34:15

标签: swift uitableview swift4

我正在使用Swift 4,终于让TableView单元正常工作。我有一个喜欢的按钮,当用户单击它时,我只会更新被单击的单元格,并显示新的图像,喜欢不喜欢,此外,我还会显示LikeCounter + 1表示喜欢,-1表示不一样。这一切正常。

我的问题是如何做到这一点,以便仅在单击按钮时更新这两个元素?

现在它会更新Table View Cell。这是我的代码

  @IBAction func voteAction(_ sender: UIButton)
    {
       if let indexPathm = TableView.indexPathForView(sender) {
            if streamsModel.VoteStatus[sender.tag] == "0"   {
                streamsModel.VoteStatus[sender.tag] = "1"
                streamsModel.Votes[sender.tag] = streamsModel.Votes[sender.tag] + 1
            } else {
                streamsModel.VoteStatus[sender.tag] = "0"
                streamsModel.Votes[sender.tag] = streamsModel.Votes[sender.tag] - 1
            }
            TableView.reloadRows(at: [indexPathm],with: .none)

        }

     }

一旦您单击该按钮,它就会移到此处

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

 let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTVC", for: indexPath) as! HomeTVC

    cell.vote_status = streamsModel.VoteStatus[indexPath.row]

            if streamsModel.VoteStatus[indexPath.row] != "0" {
                cell.voteImage.setImage(UIImage(named: "liked"), for:  .normal)
            } else {
                cell.voteImage.setImage(UIImage(named: "unliked"), for:  .normal) }

}

该TableViewCell中有更多的单元格元素,但是我只想更新并隔离TableViewCell中的特定代码。

我尝试使用此方法Update label in custom UITableView Cell进行此操作,但是我发现如果向下滚动然后向上备份,它将还原我所做的任何更改。

  // This works however if you scroll down then back up
  // it reverts back to the original status
 let button = sender as! UIButton
    let view = button.superview!
    let cell = view.superview as! HomeTVC

    let indexPath = tableView.indexPathForCell(cell)
    println(indexPath)
    if(indexPath != nil){
          if streamsModel.VoteStatus[indexPath.row] != "0" {
            cell.voteImage.setImage(UIImage(named: "liked"), for:  .normal)
        } else {
            cell.voteImage.setImage(UIImage(named: "unliked"), for:  .normal) }

 }
    }

所以我现在打电话,但是它正在更新整个单元格。

TableView.reloadRows(位于:[indexPathm],带有:.none)

1 个答案:

答案 0 :(得分:1)

您可以像这样直接检索单元格并仅更新单元格的属性:

if let cell = tableView.cellForRow(at: indexPath) as? HomeTVC {
    // Update the cell
}

编辑: 对不起,我错过了问题的第二部分。我认为这里的问题是您没有更新模型,所以当您向上滚动委托调用tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)并将值保存为先前保存在模型上时。按下按钮时,您必须更新streamsModel.VoteStatus的值。