UICollectionView:有没有办法只重新加载补充视图?

时间:2014-11-18 16:09:51

标签: ios objective-c uicollectionview

我为每个部分都有一个带有 supplementView 的uicollectionview。  在每个 supplementView 中,我有一些按钮。 在dataSource方法 collectionView:viewForSupplementaryElementOfKind:atIndexPath:我正在使用 indexPath.section 设置按钮标签。按下按钮时我制作了一些委托方法,并将节(button.tag)作为参数发送。

一切正常,但问题出现了:

  • 当我插入或删除某个部分时,它必须更新按钮标签,但我不想重新加载每个部分的所有项目。

我试过了:

  • 使用dataSource方法获取supplementViews collectionView:viewForSupplementaryElementOfKind:atIndexPath:并为每个 supplementView 调用 layoutIfNeeded 方法,这样 supplementViews 正在重新加载,但这种方法会增加我的 supplementViews
  • collectionView.subviews 中的快速,只获取 supplementView 并调用 layoutIfNeeded 方法,但它没有重新加载,只是布局正在重新加载。
  • reloadSections:方法,但这会重新加载
  • 部分中的所有项目

哦..我使用 NSFetchedResultsController (委托)来插入和删除部分。

任何人都可以帮我吗?有没有办法只重新加载 supplementView ?这种情况还有其他方法吗?

谢谢!

2 个答案:

答案 0 :(得分:11)

要重新加载补充视图,您可以使用-invalidateLayoutWithContext:

请参阅UICollectionViewLayoutInvalidationContext和方法-invalidateSupplementaryElementsOfKind:atIndexPaths:的文档(自iOS 8开始提供)。

答案 1 :(得分:6)

不是重新加载这些视图,而是获取对每个可见补充视图的引用以便您可以更改标记,这可能足以满足您的需求。

您可以使用一种简单的方法来执行此操作:

let supplementaryViews = collectionView.visibleSupplementaryViews(ofKind: "identifier")

https://developer.apple.com/documentation/uikit/uicollectionview/1618026-visiblesupplementaryviews