IOS TableView 如何更新 TableView 中的元素

Posted

技术标签:

【中文标题】IOS TableView 如何更新 TableView 中的元素【英文标题】:IOS TableView how can I update an element in my TableView 【发布时间】:2018-08-26 00:34:14 【问题描述】:

我正在使用 Swift 4,我终于让我的 TableView 单元工作正常。我有一个点赞按钮,当用户点击它时,我只更新被点击的单元格并显示一个新图像 likeunliked,此外我还显示一个 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(at: [indexPathm],with: .none)

【问题讨论】:

我认为没有办法做到这一点,你只能reloadCell 我想你错过了 add cell.button.tag = indexPath.row in table view cellForRowAt 方法。 【参考方案1】:

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

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

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

【讨论】:

完美,正是缺少的东西。我没有更新我的模型。感谢您的帮助。

以上是关于IOS TableView 如何更新 TableView 中的元素的主要内容,如果未能解决你的问题,请参考以下文章

Snapkit:如何在 scrollView 中嵌入一个简单的 tableView?

ios 两个 TableView 之间的联动, TableView 与 CollectionView 之间的联动

NSFetchedResultsController - TableView 中的 UI 更新不完整

IOS TableView 如何更新 TableView 中的元素

iOS 类似美团外卖 app 两个 tableView 联动效果实现

无法显示跨到另一个 tableview 的 Tableview 和自定义表格单元格