在 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
。
我有一个自定义 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
。