我正在使用自定义UICollectionViewFlowLayout,并且我已经为此布局注册了自定义可重用类。

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

现在,我想在初始化阶段将一些数据传递到此装饰视图,我想在此可重用类中设置一些属性

但是我无法到达此视图,我只为UICollectionView找到了此委托方法:
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath

但是这里的问题是:仅当按照文档中所述删除可重用视图时,才调用此方法:

使用此方法来检测何时从集合视图中删除补充视图,而不是监视视图本身以查看它何时出现或消失。

在初始化过程中如何将数据传递到此可重用视图?

谢谢

最佳答案

您正在使用装饰视图。将数据传递给它很复杂。

  • 创建一个UICollectionViewLayoutAttributes的自定义子类来保存数据。
  • UICollectionViewLayout子类中,重写layoutAttributesClass以返回自定义属性类。
  • 也在UICollectionViewLayout子类中,在layoutAttributesForElementsInRect:layoutAttributesForDecorationViewOfKind:atIndexPath:中正确设置装饰视图的属性。
  • 在装饰视图类(noContentDecoration)中,重写applyLayoutAttributes:以将数据拉出属性对象并应用它们。

  • 这看起来太复杂了吗?也许您最好使用补充视图而不是装饰视图。如果改为使用补充视图,则步骤为:
  • UICollectionViewDataSource(可能是您的视图控制器)中,实现collectionView:viewForSupplementaryElementOfKind:atIndexPath:以获取视图(使用dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:),然后将其与数据一起设置,然后返回它。

  • 如果您需要使用模型中的数据来自定义视图,建议使用补充视图而不是装饰视图。

    09-25 18:18
    查看更多