未在UICollectionReusableView中调用委托



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

我在UICollectionViewDataSource中添加了我的标题,如下所示;

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
}

我设置了我的协议方法,并在自定义头中添加了一个委托变量;

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)

我在UIViewControllerviewDidLoad()中将代理设置为自己

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>)

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

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

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

相关内容

  • 没有找到相关文章

最新更新