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

时间:2019-03-28 00:41:50

标签: swift uitableview

我有一个自定义单元格类,它在自己的类中定义了两个按钮和一个标签。按下按钮时,我正在使用协议代理来更新标签的值。但是无法弄清楚如何更新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 个答案:

答案 0 :(得分:0)

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