在UICollectionView中,订单会自动更改

时间:2018-03-10 15:26:10

标签: ios swift uicollectionview

我有一个大问题。

我在UICollectionView中滚动。 当绘图区域滚动太多时,排列顺序变得脱节。

即使滚动,我也不想改变顺序。 我该怎么办?

帮帮我。

let titles = ["1","2","3","4","5","6","7","8", "9", "10", "11", "12"] //titles


func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 12
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = testCollectionView.dequeueReusableCell(withReuseIdentifier: "TestCell", for: indexPath) as! TestCell //customCell

    let testTitle = cell.contentView.viewWithTag(2) as! UILabel

    testTitle.text  = titles[indexPath.row]

    return cell // yeah, all done. is these code is normal. right? But when i scroll this UICollection, change the order in Outside drawing area.
}

2 个答案:

答案 0 :(得分:2)

您的代码不应该导致单元格更改顺序。我想知道你使用viewWithTag是否有问题。这是在集合视图/表格视图单元格中查找视图的相当脆弱的方法。

您已拥有自定义单元格类型。我建议在自定义单元格类型中为标签创建一个插座,并以这种方式引用标签:

class TestCell: UICollectionViewCell {
  //(Connect this outlet in your cell prototype in your Storyboard
  @IBOutlet titleLabel: UILabel! 
}



//And in your view controller's cellForItemAt method...
cell.titleLabel.text = titles[indexPath.row]

答案 1 :(得分:2)

你绝对不应该使用viewWithTag。这样做的原因是因为细胞已经出列,这意味着通过滚动从屏幕上取下的细胞被重新用于即将出现在屏幕上的细胞。这样做是为了节省内存。有时订单的问题可能是因为以前使用过的单元格在向用户呈现时没有足够快地更新。如果您使用网络请求,解决方法可以是首先简化您的请求,然后缓存返回的任何繁重数据,例如图像。