Почему бы не использовать делегатскую систему? Это позволит вам легко получить ссылку на вашу ячейку.
В вас cell.swift
@objc protocol CellDelegate: class {
func buttonPressed(forCell cell: Cell)
}
Тогда в классе клеток: вы должны иметь свойство делегата, ваш метод IBAction и способ установить свой делегат:
class Cell {
fileprivate weak var delegate: CellDelegate? = nil
func setup(withDelegate delegate: CellDelegate) {
self.delegate = delegate
}
@IBAction func deleteButtonPressed(_ sender: Any) {
if sender.imageView?.image == UIImage(named: "do") {
sender.setImage(UIImage(named: "done"), for: .normal)
} else {
sender.setImage(UIImage(named: "do"), for: .normal)
}
delegate?.buttonPressed(forCell: self)
}
}
Наконец в вашем TableViewController: вам необходимо настроить делегата как самостоятельно во время конфигурации ячейки и реализовать метод делегирования:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = viewModel.cellIdentifier(for: indexPath)
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! Cell
cell.setup(withDelegate: self)
return cell
}
extension: TableViewController: CellDelegate {
func buttonPressed(forCell cell: Cell) {
//Do what you want
}
}
Вот как я Tipically набор действий для клеток
Можете ли вы показать свое 'cellForRowAt indexPath' –
' UIImage (названный: «делать») 'производит еще один новый экземпляр' UIImage' каждый раз, что всегда будет отличаться от вашего уже установлен образ. Следовательно, ваше состояние всегда будет падать в случае 'else'. –