Для передачи индекса ячейки для каждой из двух кнопок вам потребуется использовать два разных подхода, в зависимости от контекста, в котором вы используете кнопки.
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 } }
2. Если кнопки находятся не внутри ячейки таблицы или коллекции, а например, в футере или хедере:
- Создайте свойство с типом массива для хранения индексов ячеек:
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.