如何在UICollectionViewCell中的UITableViewCell中检测按钮点击?

时间:2019-01-14 08:04:52

标签: ios swift uitableview uicollectionview

我正在尝试检测UITableViewCell中的UICollectionViewCell中的按钮点击。

UICollectionView的委托人和dataSource是我的ViewController。每个UITableView中有一个UICollectionViewCellUITableViewCell的委托人和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
}

2 个答案:

答案 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?
}

继续执行TableCellDelegateCollectionView并在表单元格委托方法内的单元格委托上调用方法

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中实现它,并执行点击按钮时想要发生的一切。

在您的UICollectionViewUITableViewCell中,添加一个属性:

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