UICollectionViewCell在滚动时更改单元格内容

时间:2017-03-18 11:36:43

标签: swift scroll uicollectionview uicollectionviewcell

我有自定义UICollectionView。我正在使用UIView而不是UICollectionViewCell因为我想在其他地方使用UIView

UICollectionView仅水平滚动,有14个单元格;每个都以UIView为内容。

在这个UIView内是另一个UICollectionView,它包含一个UICollectionViewCell,它只是一个骰子的图像。

所以:

  1. UICollectionView Cell
  2. 单元格有UIView
  3. UIView有UICollectionViewUICollectionViewCell
  4. UICollectionViewCell只是骰子的imageView
  5. 我遇到的问题是,当UICollectionView水平滚动时,单元格的内容在保持静态时会发生变化;有时它随机移动内容,或完全删除内容。

    我不确定导致这种情况发生的原因。

    如何在滚动时确保UICollectionView保持其内容完好无损?

    UICollectionView

     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return allLocos?.count ?? 0
        }
    
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell:OuterCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "OuterCollectionViewCell", for: indexPath) as! OuterCollectionViewCell
    
            if cell.cardView == nil {
                let arr = UINib(nibName: "CardView", bundle: nil).instantiate(withOwner: nil, options: nil)
                let view = arr[0] as! CardView
                cell.contentView.addSubview(view)
                cell.cardView = view
            }
    
            if let locos = self.allLocos {
                let loco:EYLocomotive = locos[indexPath.row]
                print(indexPath.row, loco.name, loco.orders)
                cell.engineCardView?.setup(loco:loco)
            }
    
    
            cell.layoutIfNeeded()
    
            return cell
        }
    

    我认为问题是由这一行引起的:

    cell.engineCardView?.setup(loco:loco)

    我的UIView(cardView)有以下代码:

    @IBOutlet weak var diceCollectionView: UICollectionView!
    var dice:[Int] = [Int]()
    
      override init(frame: CGRect) {
            super.init(frame: frame)
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    
        func setup(loco:EYLocomotive) {
            self.diceCollectionView.delegate = self
            self.diceCollectionView.dataSource = self
            self.diceCollectionView.allowsSelection = false
            self.diceCollectionView.allowsMultipleSelection = false
            self.diceCollectionView.isUserInteractionEnabled = false
            self.diceCollectionView.showsVerticalScrollIndicator = false
            self.diceCollectionView.showsHorizontalScrollIndicator = false
            self.diceCollectionView.register(UINib(nibName: "EYDiceCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "EYDiceCollectionViewCell")
    
    // add dummy dice for testing purposes only
    for var _ in 1...3 {
                let die = Die().roll
                dice.append(die)
            }
    
        }
    

    diceCollectionView是Dice Imagery的持有者。

    当我们到达UICollectionViewDelegate时;在同一个文件中;

     // MARK: Collection View Delegate
    
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return dice.count
        }
    
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell: EYDiceCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "EYDiceCollectionViewCell", for: indexPath) as! EYDiceCollectionViewCell
    
            let dieValue = self.dice[indexPath.row] as Int
    
            let imageFile:String = "die-face-\(dieValue)"
    
            cell.imageView.image = UIImage(named: imageFile)
            cell.layoutIfNeeded()
    
            return cell
        }
    

    UICollectionView运行正常,当我开始从视口水平滚动然后向后滚动时问题就出现了。

    • 细胞变化的内容。
    • 单元格的内容有时会变为与我期待的不同的单元格
    • 滚动时单元格的内容有时会消失

    我想知道的是如何确保内容不会改变?

    谢谢

0 个答案:

没有答案