在 UICollectionReusableView 中未调用委托

Delegate Not Called in UICollectionReusableView

我有一个自定义 UICollectionReusableView 作为 UICollectionView header。在这个视图中,我有两个按钮。我已经创建了一个委托方法来执行按钮操作,但是它们没有被调用。

我在UICollectionViewDataSource中添加我的header如下;

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: Identifier.exploreCollectionReusableView, for: indexPath) as! ExploreCollectionReusableView
    return headerView
}

我设置了我的协议方法并在自定义 header;

中添加了一个委托变量
protocol SelectedDidSeeAll {
    func seeAllCategories()
    func seeAllItems()
}

var delegate: SelectedDidSeeAll?

我将目标添加到按钮;

seeAllCategoriesButton.addTarget(self, action: #selector(seeAllCategories), for: .touchUpInside)
seeAllItemsButton.addTarget(self, action: #selector(seeAllItems), for: .touchUpInside)

我在 UIViewController viewDidLoad()

中将委托设置为自己
exploreCollectionReusableView.delegate = self

我实现了 @objc 功能;

@objc func seeAllCategories() {
    delegate?.seeAllCategories()
}

@objc func seeAllItems() {
    delegate?.seeAllItems()
}

最后,我符合UIViewController;

中的委托方法
extension ExploreViewController: SelectedDidSeeAll {

func seeAllCategories() {
    // Do Something
    print("something")
    }

func seeAllItems() {
    // Do Something
    print("something")
    }
}

委托控制台日志

打印委托时我得到;

Optional(<bidr.ExploreViewController: 0x7fd466e5d0b0>)

所以我假设我已经完成了实现委托方法所需的一切,但是,单击按钮没有任何效果。

而不是viewDidLoad(),在collectionView(_: viewForSupplementaryElementOfKind: at:)中设置delegate,即

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: Identifier.exploreCollectionReusableView, for: indexPath) as! ExploreCollectionReusableView
    headerView.delegate = self
    return headerView
}

viewDidLoad()中,可能没有设置exploreCollectionReusableView