1个部分和2个单元格,但是4个indexPath.row

时间:2018-05-01 11:21:40

标签: swift uicollectionview swift4

斯威夫特4。 我想在一个部分中返回两个单元格,所以在我的班级CollectionViewController中我做了:

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

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

我看到两个单元格,但是如果我在下面的代码中打印indexPath.row(仍然在同一个类中),我看到0 1 0 1。为什么不只有一个0 1,因为我在一个部分只有两个单元格?

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! CollectionViewCell
    print(indexPath.row)
    return cell 
}

1 个答案:

答案 0 :(得分:1)

cellForItemAt被召唤四次。您的numberOfItemsInSection是2的硬编码。当视图加载cellForItemAt被调用两次(每个单元格一次)。当您从reloadData()关闭时调用DispatchQueue.main.async时,它会再次被调用两次。

已更新 - 如何避免第一次通话:

您需要将单元格数据存储在数组中,并且只在调用reloadData()之前填充数组。因此,首次加载视图时,数组将为空。

var yourArray = [YourObject]() //Empty Array    

//..

DispatchQueue.main.async {
    //append your two items to the yourArray
    yourArray.append(/*cell1data*/)
    yourArray.append(/*cell2data*/)
    self.collectionView?.reloadData()
}

//..

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return yourArray.count
}