如何在呈现和关闭模态视图控制器时保持选中的集合视图单元格?

How to keep collection view cell selected when presenting and dismissing modal view controller?

我有一个 UICollectionViewController 也可以用作 UICollectionViewDelegateFlowLayout 来调整单元格大小。一个单元格选择模态显示一些自定义控件,然后 returns 完成时,但所选单元格再次出现时不再被选中。

我看到 collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) 的委托方法被调用,但 collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) 没有。我还看到布局被要求提供首选单元格大小,所以我认为它们正在重绘,但单元格已经存在。

我可以通过调用 relaodData() 来解决问题,单元格知道它已被选中,并相应地重新绘制,但这似乎是一个代价高昂且错误的解决方案。关于我缺少的东西有什么建议吗?谢谢。

正在调用 collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath),但不调用 collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath)

以下委托方法的默认实现取消选择单元格。

在不调用 super 的情况下覆盖它:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)

我看到正在调用 collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) 的委托方法,但没有调用 collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath)。我还看到布局被要求提供首选单元格大小,所以我认为它们正在重绘,但单元格已经存在。

想通了。

UICollectionViewController 有 属性 clearsSelectionOnViewWillAppear 自动设置为真。

我所要做的就是将其设置为 false。