Полагаю, у вас есть подкласс UICollectionViewCell
с данными внутри, поэтому вы можете добавить действие для своей кнопки в ячейку
class YourCell: UICollectionViewCell {
...
var item: Item?
...
@IBAction func buttonPressed(_ sender: UIButton) {
}
...
}
Теперь создайте делегат вашей ячейки
protocol YourCellDelegate {
func buttonPressed(pass data: Item)
}
и создайте переменную делегата в вашей ячейке
class YourCell: UICollectionViewCell {
...
var delegate: YourCellDelegate?
...
}
, затем в действии кнопки вызовите метод делегата и передайте данные, если вам нужно
@IBAction func buttonPressed(_ sender: UIButton) {
delegate?.buttonPressed(pass: item!)
}
Теперь внедрите протокол YourCellDelegate
к вашему UITableViewCell
а также объявить, что должно происходить при нажатии кнопки.Для этого создайте делегат ваших UITableViewCell
и
protocol TableViewCellDelegate {
func buttonInYourCellPressed(pass data: Item)
class TableViewCell: UITableViewCell, YourCellDelegate {
...
var delegate: TableViewCellDelegate?
...
func buttonPressed(pass data: Item) {
delegate?.buttonInYourCellPressed(pass data: date)
}
}
также в методе источника данных представления коллекции в UITableViewCell
установите делегат ячейки как ваш TableViewCell
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
cell.delegate = self
...
}
наконец реализуйтеваш TableViewCellDelegate
к вашему UIViewController
и объявите, что должно произойти, когда кнопка в представлении коллекции нажата
class ViewController: UIViewController, TableViewCellDelegate {
...
func buttonInYourCellPressed(pass data: Item) {
performSegue(withIdentifier: "identifier", sender: data)
}
}
В конце установите делегата TableViewCell в UITableView
метод источника данных cellForRowAt
в качестве вашегоViewController
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
cell.delegate = self
...
}
, затем в prepare(for segue:
в вашем ViewController вы можете просто назначить свойство целевого ViewController для пониженного отправителя
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "identifier" {
let destinationVC = segue.destination as! SecondViewController
destinationVC.selectedItem = sender as! Item
}
}