Подтвердить что ты не робот

UICollectionView: Есть ли способ перезагрузить только дополнительные виды?

У меня есть uicollectionview с дополнительнымView для каждого раздела.  В каждом дополнительном представлении у меня есть несколько кнопок. В методе dataSource collectionView: viewForSupplementaryElementOfKind: atIndexPath: Я устанавливаю теги кнопок с помощью indexPath.section. Я сделал некоторые методы делегатов, когда нажата кнопка, и отправьте раздел (button.tag) в качестве параметра.

Все работает отлично, но здесь возникает проблема:

  • Когда я вставляю или удаляю раздел, он должен обновлять теги кнопок, но я не хочу перезагружать все элементы из каждого раздела.

Я пробовал:

  • чтобы получить дополнительные элементы с помощью метода dataSource collectionView: viewForSupplementaryElementOfKind: atIndexPath: и метод layoutIfNeeded для каждого дополнительного вида, таким образом, дополнительные_документы перезагружаются, но этот подход умножает мои дополнительные виды.
  • быстрый для коллекцииView.subviews и получить только дополнительный метод представления и вызова layoutIfNeeded, но он не перезагружается, просто макет перезагружается.
  • reloadSections: метод, но это перезагружает все элементы из раздела

Ohh.. И я использую NSFetchedResultsController (делегат) для вставки и удаления разделов.

Может ли кто-нибудь помочь мне с этим? Есть ли способ перезагрузить только дополнительный файл? Есть ли другой подход для этого сценария?

Спасибо!

4b9b3361

Ответ 1

Чтобы перезагрузить дополнительные виды, вы можете использовать -invalidateLayoutWithContext:.

См. документацию для UICollectionViewLayoutInvalidationContext и метода -invalidateSupplementaryElementsOfKind:atIndexPaths: (доступно с iOS 8).

Ответ 2

Вместо перезагрузки этих представлений получение ссылки на каждое видимое дополнительное представление, чтобы вы могли изменить тег, может быть достаточно для ваших нужд.

Существует простой способ, который вы можете использовать для этого:

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

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