iOS Swift:如何准备一个单元以供重用

时间:2015-03-22 21:41:47

标签: ios swift uikit

我有一个带有自定义单元格的UITableView,每个单元格都包含一个水平滚动的UICollectionView。当表视图单元被回收时,集合视图的水平滚动位置随之回收。在创建新单元格时,是否应该手动重置集合视图滚动位置?如果是这样,有一种方法可以保持每个单元格的滚动位置吗?

自定义UITableViewCell

class CustomCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource {

    var collectionView:UICollectionView!
    var layout = UICollectionViewFlowLayout()
    var collectionData = [UIImage]()
    let kCellIdentifier = "Cell"

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        layout.minimumLineSpacing = 10.0
        layout.minimumInteritemSpacing = 1.0
        layout.scrollDirection = UICollectionViewScrollDirection.Horizontal

        collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
        collectionView.registerClass(ItemCell.self, forCellWithReuseIdentifier: kCellIdentifier)
        collectionView.delegate = self
        collectionView.dataSource = self
        addSubview(collectionView)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        layout.itemSize = CGSize(width: 800, height: bounds.height)
        collectionView.frame = bounds
    }
}

extension ProjectCell: UICollectionViewDataSource {
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(kCellIdentifier, forIndexPath: indexPath) as! ItemCell
        //Reset collectionView scroll position?
        return cell
    }
}

1 个答案:

答案 0 :(得分:4)

放置代码以重置UICollectionViewCell中滚动位置的最佳位置是prepareForReuse方法。在您的单元子类中重写它,并且每当先前存在的单元格被dequeueReusableCellWithReuseIdentifier出列时,它将被调用。