子类UICollectionView

时间:2014-12-12 14:00:48

标签: ios swift uicollectionview

所以,我需要扩展UICollectionView功能,覆盖单元格等。 在每个示例中,我都会看到UICollectionViewController的子类,但不仅仅是UICollectionView

我不想让我的新课程(称为GridSet)成为故事板中单个页面(UIViewController)的超类,因为我有更多元素(自定义按钮,标签等) )我不想在新课程中维护它们,但我想在我的页面UIViewController中保留它们。

我甚至想在一个UIViewController中插入两个子类,并在故事板中执行此操作(但您不能将一个UIViewController放在另一个UIViewController中。

问题是,当我对UICollectionViewUICollectionViewDataSource进行子类化时,似乎它甚至没有初始化。

class GridSet: UICollectionView, UICollectionViewDataSource {

let computers = [
    ["Name" : "MacBook Air", "Color" : "Silver"],
    ["Name" : "MacBook Pro", "Color" : "Silver"],
    ["Name" : "iMac", "Color" : "Silver"],
    ["Name" : "Mac Mini", "Color" : "Silver"],
    ["Name" : "Mac Pro", "Color" : "Black"]
]

override func awakeFromNib() {
    super.awakeFromNib()

    let nib = UINib(nibName: "GridSetCell", bundle: nil)
    self.registerNib(nib, forCellWithReuseIdentifier: "GridSetCellDefault")
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return computers.count
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = self.dequeueReusableCellWithReuseIdentifier("GridSetCellDefault", forIndexPath: indexPath) as GridSetCell

    cell.label = computers[indexPath.row]["Name"]!

    return cell
}

}

我使用nib作为自定义单元格:

class GridSetCell: UICollectionViewCell {

@IBOutlet private weak var cLabel: UILabel!
@IBOutlet private weak var cBack: UIImageView!

var label: String = "" {
    didSet {
        if (label != oldValue) {
            cLabel.text = label
        }
    }
}

var back: String = "" {
    didSet {
        if (back != oldValue) {
            cBack.image = UIImage(named: back)
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

首先使用系统UICollectionViewCell中的版本,通过继承UICollectionViewLayoutUICollectionView来实现目标。本教程介绍了以下步骤: http://skeuo.com/uicollectionview-custom-layout-tutorial 当这些工作正常时,如果您仍然需要继承UICollectionView,那么您将有工作组件来安装"进入"那个新的子类。