Как обновить UITableView при изменении значения метки CustomCell? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть собственный класс ячейки с двумя кнопками и одной меткой, определенной в своем собственном классе. Использую протокол-делегат для обновления значения метки при нажатии кнопки. Но я не могу понять, как обновить 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 голосов
/ 28 марта 2019

В cellForRow вы должны установить cell.delegate = self, чтобы эта логика начала работать. Недостаточно просто заставить ваш контроллер взаимодействовать с вашим пользовательским протоколом делегирования ячейки. Из вашего поста я предполагаю, что delegate всегда nil в ячейке, поэтому он не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...