【问题标题】:iOS Swift: How to prepare a cell for reuseiOS Swift:如何准备一个单元格以供重用
【发布时间】:2015-03-22 21:41:46
【问题描述】:

我有一个带有自定义单元格的 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
    }
}

【问题讨论】:

    标签: ios swift uikit


    【解决方案1】:

    UICollectionViewCell 中放置重置滚动位置的代码的最佳位置是prepareForReuse 方法。在您的单元格子类中覆盖它,每次先前存在的单元格被dequeueReusableCellWithReuseIdentifier 出队时都会调用它。

    【讨论】:

    • 有没有办法记住每个单元格的滚动位置?所以当我滚动回一个我之前交互过的单元格时,它会处于相同的滚动位置吗?
    • 您必须将滚动位置存储在表格视图控制器上,并在您为表格视图提供单元格时应用它。
    • 我可以将该值存储在单元格中还是需要将其存储在视图控制器中?
    • 将其存储在视图控制器中。
    • 嗯。遇到这个问题。我应该在 viewController 中创建一个存储所有滚动位置的数组吗?如果是这样,我使用什么方法将 scrollPosition 保存到数组中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多