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