Я бы предложил вам использовать шаблон делегата.
Итак, вам нужен один протокол для ячейки табличного представления и один для ячейки табличного представления
protocol TableCellDelegate: class {
func buttonPressed(_ sender: CustomButton)
}
protocol CollectionCellDelegate: class {
func buttonInTableCellPressed(_ sender: CustomButton)
}
теперь создайте delegate
переменные для подклассов ячеек
class TableCell: ... {
weak var delegate: TableCellDelegate?
}
class CollectionCell: ... {
weak var delegate: CollectionCellDelegate?
}
продолжить реализацию TableCellDelegate
до CollectionView
и вызвать метод для делегата ячейки внутри метода делегата ячейки таблицы
extension CollectionCell: TableCellDelegate {
func buttonPressed(_ sender: CustomButton) {
delegate?.buttonInTableCellPressed(sender)
}
}
следующий орудие CollectionCellDelegate
на вашем контроллере вида
extension ViewController: CollectionCellDelegate {
func buttonInTableCellPressed(_ sender: CustomButton) {
... // this is called when button in table view cell is pressed
}
}
Теперь не забудьте установить делегат ячейки коллекции внутри cellForItemAt
в ViewController
и делегат ячейки таблицы внутри cellForRowAt
в CollectionCell
class ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
cell.delegate = self
...
}
}
class CollectionCell: UICollectionViewCell, UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
cell.delegate = self
...
}
}
Теперь, наконец, вызов метода для делегата внутри ячейки таблицы при нажатии кнопки
@IBAction func buttonTapped(_ sender: CustomButton) {
delegate?.buttonPressed(sender)
}