CustomCell 标签值更改时如何更新 UITableView?

Posted

技术标签:

【中文标题】CustomCell 标签值更改时如何更新 UITableView?【英文标题】:How to update UITableView when a CustomCell label value changes? 【发布时间】:2019-03-28 00:41:49 【问题描述】:

我有一个自定义单元格类,其中有两个按钮和一个在其自己的类中定义的标签。按下按钮时,我正在使用协议委托来更新标签的值。但我无法弄清楚如何更新 UITableView。

protocol customCellDelegate: class 
    func didTapDecrementBtn(_ sender: AllCountersTableViewCell)
    func didTapIncrementBtn(_ sender: AllCountersTableViewCell)
    func updateTableViewCell(_ sender: AllCountersTableViewCell)


class AllCountersTableViewCell: UITableViewCell 


    @IBOutlet weak var counterValueLbl: UILabel!
    @IBOutlet weak var counterNameLbl: UILabel!
    @IBOutlet weak var counterResetDateLbl: UILabel!

    @IBOutlet weak var counterDecrementBtn: UIButton!
    @IBOutlet weak var counterIncrementBtn: UIButton!

    weak var delegate: customCellDelegate?

    @IBAction func decrementBtnPressed(_ sender: UIButton) 
        delegate?.didTapDecrementBtn(self)
        delegate?.updateTableViewCell(self)
    

    @IBAction func incrementBtnPressed(_ sender: UIButton) 
        delegate?.didTapIncrementBtn(self)
        delegate?.updateTableViewCell(self)
    

在我的 ViewController 中,我提供了委托。但是 reloadData() 不起作用,所以尽管sender.counterLbl.value 正在改变它并没有反映在视图上。

extension AllCountersVC: customCellDelegate 

    func didTapIncrementBtn(_ sender: AllCountersTableViewCell) 
        guard let tappedCellIndexPath = tableView.indexPath(for: sender) else return
        let rowNoOfCustomCell = tappedCellIndexPath[1]
        let newValue = String(allCounter[rowNoOfCustomCell].incrementCounterValue(by: allCounter[rowNoOfCustomCell].counterIncrementValue))
        sender.counterValueLbl.text = newValue
    

    func updateTableViewCell(_ sender: AllCountersTableViewCell) 
        allCountersTableView.reloadData()
    

【问题讨论】:

【参考方案1】:

cellForRow 中,您必须设置cell.delegate = self 才能使此逻辑开始工作。仅仅让您的控制器符合您的自定义单元委托协议是不够的。从您的帖子中,我假设 delegate 在单元格中始终为 nil,这就是它不起作用的原因。

【讨论】:

已经完成了。我正在使用 UITableViewController 而不是 UIViewController 顶部有 UITableView 。这有关系吗?

以上是关于CustomCell 标签值更改时如何更新 UITableView?的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa Touch:每次点击标签栏的标签时,如何更新表格视图?

ng-class 在值更改时未正确更新

ViewController 中的 CustomCell 标签不显示数据

更改上下文时如何立即更新错误值

在使用带有 Angular 的 FromEvent RxJS 订阅输入标签值更改时如何避免使用“任何”?

如何在数据绑定值更改时更新图像?