如何快速更新某个位置的 tableview 项目?

Posted

技术标签:

【中文标题】如何快速更新某个位置的 tableview 项目?【英文标题】:How I can update item of tableview on certain position swift? 【发布时间】:2020-07-16 05:41:53 【问题描述】:

我的应用程序中有表格视图,单击此列表中的任何项目后,我将移至此功能中的详细信息视图:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        
        self.tabBarController?.tabBar.isHidden = true
        
        
        let storyboard = UIStoryboard(name: "Fruitslist", bundle: nil)
        guard let details = storyboard.instantiateViewController(identifier: "DetailView") as? DetailView else  return 
        
        
        details.modalPresentationStyle = .fullScreen
        details.delegate = self
        
        self.show(details, sender: nil)
        
        
    

在此详细视图中,我有协议:

protocol AddToNotepad 
    func addToNotepadFunc(added:Bool)

当我从这个详细信息屏幕移动到主列表时,我会发送一些数据:

override func viewWillDisappear(_ animated: Bool) 
        super.viewWillDisappear(animated)
        
        if self.isMovingFromParent 
            self.tabBarController?.tabBar.isHidden = false
            self.delegate?.addToNotepadFunc(added: true)
        
    

在我的主列表中,我在扩展中收到此数据:

extension FruitList:AddToNotepad
    func addToNotepadFunc(added: Bool) 
        let indexPath = IndexPath(item: 1, section: 2)
        if let fruitCell = tableView.cellForRow(at: indexPath) as? FruitListCell 
            
            fruitCell.eTitle.text = "232332322332"
        
    
    

而且我不明白如何在某些部分更新单元格的某些部分。我也可以发送详细视图的部分,但是如何在我不明白的部分更新单元格的某些元素:(你可以看到我的尝试,但它不起作用。也许有人知道我在哪里犯了一些错误?

【问题讨论】:

@Frankenstein,因为这是我造成的愚蠢错误:) 我认为这个问题对这个技能数据库没有帮助,但是如果你认为这个问题会,我当然可以恢复它有用 【参考方案1】:

你的问题是你在这里设置了静态索引路径

let indexPath = IndexPath(item: 1, section: 2)

虽然你应该

var lastIndex:IndexPath!
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
  lastIndex = indexPath
  .....

然后用它来更新addToNotepadFunc里面的模型就好了

array[lastIndex.section][lastIndex.row].added = true
// refresh table at that indexpath
self.tableView.reloadRows(at:[lastIndex],with:.none)

【讨论】:

我明白了,它有点像测试))当然我会设置选择的最后选择的索引,但是在详细屏幕上的一些操作后我无法更改所选单元格的标题,这是正确的问题现在,但感谢您指出另一个问题:) @Andrew 我认为以上答案是针对您的整个问题的,如果还有其他问题,您能详细说明吗?? 是的,上面的答案是针对整个问题的,我正在 android recyclerview 上寻找像 notifyItemChanged(position,payload) 这样的东西 :) 我不需要刷新整个列表,但我想刷新某个单元格上的某个项目.也许这些信息会对你有所帮助:) 你需要reloadRows 查看编辑,但首先你必须更新数据源 那么,我看到如果不更新数据源就无法更新单元格?

以上是关于如何快速更新某个位置的 tableview 项目?的主要内容,如果未能解决你的问题,请参考以下文章

在 CoreData 中更新项目不会刷新 tableView

在 Tableview 中,我想知道如何在单元格最后位置设置多行 UILabel

如何更新 ArrayList 中某个位置的元素? [复制]

树状数组区间更新

更新代码的问题

如何在 Firebase 中删除 tableview 项目后删除它们