我正在尝试检测UITableViewCell
中的UICollectionViewCell
中的按钮点击。
UICollectionView
的委托人和dataSource是我的ViewController
。每个UITableView
中有一个UICollectionViewCell
。 UITableViewCell
的委托人和dataSource是UICollectionViewCell
。
我需要检测ViewController
中的按钮轻触。
ViewController
@IBOutlet collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
}
UICollectionView
@IBOutlet tableView: UITableView!
override func awakeFromNib() {
super.awakeFromNib()
tableView.delegate = self
tableView.dataSource = self
}
UITableViewCell
@IBAction func buttonTapped(_ sender: CustomButton) {
// Detect Button Tap in ViewController
}
答案 0 :(得分:2)
我建议您使用委托模式。
因此,您需要一种用于表视图单元格的协议和一种用于集合视图单元格的协议
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
的{{1}}内设置集合单元的委托,并在ViewController
的{{1}}内设置表单元的委托
cellForRowAt
现在,最后,当按下按钮时,在表单元格内的委托上调用方法
CollectionCell
答案 1 :(得分:2)
您可以为此编写自己的委托。
protocol ButtonDelegate: class {
func buttonTapped(_ button: UIButton)
}
然后,在您的ViewController
中实现它,并执行点击按钮时想要发生的一切。
在您的UICollectionView
和UITableViewCell
中,添加一个属性:
weak var buttonDelegate: ButtonDelegate?
然后,修改您的UITableViewCell
:
@IBAction func buttonTapped(_ sender: CustomButton) {
buttonDelegate?.buttonTapped(sender)
}
在ViewController
中,您必须在UICollectionView
上设置委托:
collectionView.buttonDelegate = self
最后,在cellForRowAt
的{{1}}方法中,将UICollectionView
的{{1}}属性设置为{{1} },即您的buttonDelegate
:
UITableViewCell