каждой кнопки (UIButton), которые находятся внутри ячейки обновить tag, а tag в кнопке - индекс какого-либо массива. Так вот, как мне можно сделать это не прибегая к reloadData()? Дело в том, что мне нужно, чтобы анимация после deleteRows(at:) проиграла до конца и обновились все теги кнопки внутри каждой ячейки.
Тут наверное уместнее спросить, зачем тебе таги? )
у меня есть кнопка удаления ячейки. В моём случае нецелесообразно использовать editingStyle. tag для кнопки хранит номер элемента в массиве, соответственно, и номер строки в tableView. Мне просто нужно, чтобы удалялись строки в таблице не через reloadData с обновлённым массиво, а через deleteRows(at:), чтобы проигрывалась чёткая анимация
Для этого можно сделать хитрее. Создать делегат protocol MyCellDelegate: AnyObject { func buttonDidTapped(in cell: MyCell) } и в ячейке final class MyCell: UITableViewCell { weak var delegate: MyCellDelegate @objc private func buttonDidTapped(_ sender: UIButton) { delegate?.buttonDidTapped(in: self) } } А вот теперь уже где-то в контроллере: class TableViewController: UITableViewController { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // … mycell.delegate = self } } extension TableViewController: MyCellDelegate { func buttonDidTapped(in cell: MyCell) { guard let indexPath = tableView.indexPath(for: cell) else { return } print(indexPath) // Теперь ты знаешь какая это ячейка и делай что нужно } }
у меня примерно так сделано) Тоже делегат ячейки обрабатывает нажатие кнопки. Разница лишь в том, что у меня у меня в теге кнопки хранится номер элемента и по нему идёт indexPath(row:). Дело в том, что у меня ячейки привязаны к массиву. Мне нужно, чтобы он ещё и элемент правильный в массиве удалил. Просто получится, что если я удалю элемент по середине, то элементы в массиве сдвинутся, а вот номера ячеек нет, поскольку realoadData() я не вызываю
У тебя ячейки расположены в соответствии с элементами массива
изначально да, но если удалить методом deleteRows(at:), например где-нибудь в центре таблицы какую-нибудь ячейку, то массив сдвинется, а ячейки этого не будут знать и останется прошлый индекс
Удалять нужно сначала в массиве, а после уже саму ячейки. И делать это нужно в методе что указал выше.
Обсуждают сегодня