Как передать индекс ячейки для каждой из двух кнопок?

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

  1. Если кнопки расположены внутри ячейки UITableView или UICollectionView:
  • Создайте протокол с методом, который принимает индекс ячейки в качестве параметра:
     protocol CellButtonDelegate: AnyObject {
         func buttonTapped(at index: Int)
     }
  • Добавьте делегатское свойство в ячейку, которое будет ссылаться на объект, подписанный на протокол:
     class CustomCell: UITableViewCell {
         weak var delegate: CellButtonDelegate?
         var cellIndex: Int = 0

         @IBAction func buttonTapped(_ sender: UIButton) {
             delegate?.buttonTapped(at: cellIndex)
         }
     }
  • В методе cellForRowAt indexPath в вашем классе UITableViewController или UICollectionViewController установите делегат для кнопок:
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
         cell.delegate = self
         cell.cellIndex = indexPath.row
         return cell
     }
  • Подпишите ваш класс UITableViewController или UICollectionViewController на протокол CellButtonDelegate и реализуйте метод buttonTapped:
     extension YourViewController: CellButtonDelegate {
         func buttonTapped(at index: Int) {
             // Обработка нажатия кнопки для ячейки с индексом index
         }
     }
  1. Если кнопки находятся не внутри ячейки таблицы или коллекции, а например, в футере или хедере:
  • Создайте свойство с типом массива для хранения индексов ячеек:
     var cellIndexes: [Int] = []
  • При заполнении данных в методе cellForRowAt indexPath добавляйте индекс ячейки в массив:
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         // Создание ячейки...
         cellIndexes.append(indexPath.row)
     }
  • В методе кнопки обрабатывайте нажатие и передавайте соответствующий индекс из массива:
     @IBAction func buttonTapped(_ sender: UIButton) {
         guard let index = cellIndexes.firstIndex(where: { $0 == sender.tag }) else { return }
         // Обработка нажатия кнопки для ячейки с индексом index
     }

Обратите внимание, что здесь вам потребуется настроить свойство tag для каждой кнопки, чтобы оно соответствовало идентификатору ячейки.

Таким образом, в зависимости от контекста вашего приложения и расположения кнопок, вы можете использовать один из этих подходов для передачи индекса ячейки для каждой из двух кнопок в Swift.