1 раздел и 2 ячейки, но 4 indexPath.row - PullRequest
0 голосов
/ 01 мая 2018

Свифт 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 голосов
/ 01 мая 2018

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
}
...