2014-01-06 2 views
1

Я использую пользовательский UICollectionViewFlowLayout, и я зарегистрировал заказ многоразового класса для этой схемы ...Передача данные на UICollectionReusableView

[self registerClass:[noContentDecoration class] forDecorationViewOfKind:knoContentsDecorationKind]; 

Теперь я хочу передать некоторые данные этого виду декорирования в фазе инициализации, я хочу установить некоторые свойства в этом многоразовом классе

Но я не могу достичь этой точки зрения, я нашел только этот метод делегата для UICollectionView:

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath 

, но здесь проблема: этот метод вызывается только тогда, когда многоразовые вид удаляется, как указано в документации:

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

Что я могу сделать, чтобы передать данные в это многоразовое представление при инициализации?

спасибо

ответ

2

Вы используете вид декорации. Передача данных на него сложна.

  1. Создайте собственный подкласс UICollectionViewLayoutAttributes для хранения данных.
  2. В вашем подклассе UICollectionViewLayout переопределите layoutAttributesClass, чтобы вернуть класс пользовательских атрибутов.
  3. Также в вашем подклассе UICollectionViewLayout правильно установите атрибуты для оформления, как в layoutAttributesForElementsInRect:, так и в layoutAttributesForDecorationViewOfKind:atIndexPath:.
  4. В вашем классе вида просмотра (noContentDecoration), переопределите applyLayoutAttributes:, чтобы вытащить данные из объекта атрибутов и применить их.

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

  1. В вашей UICollectionViewDataSource (который, вероятно, ваш контроллер представления), осуществлять collectionView:viewForSupplementaryElementOfKind:atIndexPath:, чтобы получить вид (с помощью dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:), а затем установить его с данными, то верни это.

Я рекомендую использовать дополнительный вид вместо декоративного вида, если вам нужно настроить его с данными из вашей модели.

+0

большое спасибо –

Смежные вопросы