UICollectionView.reloadData() works after adding first item, then seems to run one behind

360 Views Asked by At

I have an empty UICollectionView with an array of strings as the datasource.

When I add the first string to the array and call reloadData() on the collectionView this works as I would expect. When I add a second string and call reloadData() nothing happens, but my array has definitely grown. When I add a third item and call reloadData(), the second item appears but not the third. Each new addition results in the previous string appearing.

If I then call reloadData() without adding a string, the last item then appears.

My code for adding to the collection:

func addKeyword(keyword: String) {

    keywords.append(keyword)
    newKeywordText.text = ""
    keywordCollection.reloadData()

}

And my collectionView relevant code:

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

    print("keywords: at refresh \(keywords.count)")
    return keywords.count
}


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

    let keyword = keywords[indexPath.row]
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "KeywordCloudCell", for: indexPath) as! KeywordCloudCell
    let keywordLabel:UILabel = (cell.viewWithTag(1) as? UILabel)!
    keywordLabel.text = keyword

    return cell
}

I know that numberOfItemsInSection is returning the correct count, so I have no idea why its behaving this way. Any ideas?

1

There are 1 best solutions below

0
dhin On BEST ANSWER

Try to complete your array population first, and when it is completed then call keywordCollection.reloadData()

can you also share on how you are calling the addKeyword method