我创建了一个自定义类,它是UICollectionReusableView
的子类。它本质上是一个Collection View的标题标题,我在其上添加了几个按钮。按下按钮时,我希望视图控制器过滤结果(取决于按下的按钮)。
我需要我的视图控制器有一个这个自定义类的出口,但是这不起作用,因为Xcode抱怨重复的内容有类(即使我只会使用一个collectionView节头)。所以我的下一个选择是委托。
我的问题是双重的:
如何设置自定义类'委托给视图控制器?通常我会在prepareForSegue
中设置代理人,但由于我没有这样做,所以我不知道该怎么做。我的视图控制器是在storyboard中创建的,我的自定义类没有引用它。即使在我的View Controller中,我也无法访问集合视图的节标题以将其委托设置为self(我查看了Apple的文档,并且没有属性可以访问节标题。)
当我将IBAction
设置为自定义类时,如何确保被点击的按钮也作为发件人传入?我已将其中一个按钮连接到某个操作并写了func someAction (sender: AnyObject) {}
但该程序如何知道该按钮本身是作为发件人传入的?
这是我的代码:
// Custom Class
class CollectionHeaderView: UICollectionReusableView {
@IBAction func buttonPressed (sender: AnyObject) {
**delegate?.didTapButton(self)**
}
var delegate: UICollectionViewDelegate?
}
// Protocol
protocol CollectionHeaderViewDelegate {
func didTapButton(sender: CollectionHeaderView)
}
// View Controller (the delegate)
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "CollectionHeaderView", forIndexPath: indexPath) as! CollectionHeaderView
headerView.delegate = self
return headerView
}
extension BrowseViewController: CollectionHeaderViewDelegate {
func didTapButton(sender: CollectionHeaderView) {
print("Delegate's Button Tapped")
}
}
粗体部分是Xcode给我一个错误说明的地方," UICollectionViewDelegate类型的值没有成员'点按了按钮'" - 不确定为什么它指的是UICollectionViewDelegate .. 我尝试更改变量名称和调用以点击委托给headerViewDelegate,但它仍然给出了错误。
答案 0 :(得分:1)