UICollectionView.reloadData() 在添加第一项后工作,然后似乎在后面运行

Posted

技术标签:

【中文标题】UICollectionView.reloadData() 在添加第一项后工作,然后似乎在后面运行【英文标题】:UICollectionView.reloadData() works after adding first item, then seems to run one behind 【发布时间】:2017-09-11 22:25:12 【问题描述】:

我有一个带有字符串数组作为数据源的空 UICollectionView。

当我将第一个字符串添加到数组中并在 collectionView 上调用 reloadData() 时,这可以正常工作。当我添加第二个字符串并调用 reloadData() 时,什么也没有发生,但我的数组肯定已经增长了。当我添加第三个项目并调用 reloadData() 时,会出现第二个项目,但不会出现第三个项目。每个新添加都会导致出现前一个字符串。

如果我随后调用 reloadData() 而不添加字符串,则会出现最后一项。

我添加到集合的代码:

func addKeyword(keyword: String) 

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


还有我的collectionView相关代码:

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

我知道 numberOfItemsInSection 正在返回正确的计数,所以我不知道它为什么会这样。有什么想法吗?

【问题讨论】:

【参考方案1】:

尝试先完成数组填充,完成后调用 keywordCollection.reloadData()

您能否也分享一下您是如何调用 addKeyword 方法的

【讨论】:

以上是关于UICollectionView.reloadData() 在添加第一项后工作,然后似乎在后面运行的主要内容,如果未能解决你的问题,请参考以下文章