向下转发UICollectionReusableView到子类失败

时间:2015-07-10 21:26:32

标签: ios uicollectionview downcast

我创建了UICollectionReusableView的子类。然后在函数

collectionViewTableLayoutManager(manager: collectionView: headerViewForRow row:  indexPath: )

我正在尝试将视图出列并将其转换为子类。

这是方法的开始:

func collectionViewTableLayoutManager(manager: DRCollectionViewTableLayoutManager!, collectionView: UICollectionView!, headerViewForRow row: UInt, indexPath: NSIndexPath!) -> UICollectionReusableView! {

    let view = collectionView.dequeueReusableSupplementaryViewOfKind(DRCollectionViewTableLayoutSupplementaryViewRowHeader, withReuseIdentifier: collectionViewHeaderIdentifier, forIndexPath: indexPath) as! CVHeaderView

它在运行时在"让视图崩溃..."有这个错误:

Could not cast value of type 'UICollectionReusableView' (0x103994fb8) to 'CollectionViewTableLayout.CVHeaderView' (0x1023f3bd0).

这是我的子类代码:

class CVHeaderView: UICollectionReusableView {

let textLabel: UILabel!

override init(frame: CGRect) {

    let textSize = CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height)
    textLabel = UILabel(frame: textSize)

    super.init(frame: frame)

    textLabel.font = UIFont.systemFontOfSize(10)
    textLabel.autoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth
    textLabel.textAlignment = NSTextAlignment.Center
    textLabel.backgroundColor = UIColor.clearColor()


    self.addSubview(textLabel)


}

required init(coder aDecoder: NSCoder) {
...
}

我很困惑为什么我不能这样做。它是否与我对DR ...类的外部库的使用有某种关系?

1 个答案:

答案 0 :(得分:0)

感谢Paulw11,我想出了该怎么做。在没有子类的情况下构建应用程序之后,我会在这里为任何其他尝试子类化的新手提供答案。

在构建子类之后,我需要从:

更改我的registerClass语句
collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: DRCollectionViewTableLayoutSupplementaryViewRowHeader, withReuseIdentifier: collectionViewHeaderIdentifier)

collectionView.registerClass(CVHeaderView.self, forSupplementaryViewOfKind: DRCollectionViewTableLayoutSupplementaryViewRowHeader, withReuseIdentifier: collectionViewHeaderIdentifier)

全部修复。