带有重用标识符的 UICollectionViewCell 初始化

Posted

技术标签:

【中文标题】带有重用标识符的 UICollectionViewCell 初始化【英文标题】:UICollectionViewCell init with reuseIdentifier 【发布时间】:2015-02-20 19:03:00 【问题描述】:

我有一个自定义 UICollectionViewCell,我通过像这样注册它从我的视图控制器中取出它

[self.calendarView registerNib:[UINib nibWithNibName:NSStringFromClass([DayCell class]) bundle:nil] forCellWithReuseIdentifier:dayCell];

然后像这样出队

cell = [collectionView dequeueReusableCellWithReuseIdentifier:dayCell forIndexPath:indexPath];

我的问题是,哪个UICollectionViewCell init 方法可以让我访问单元格的reuseIdentifierawakeFromNibinitWithCoder: 方法都被调用,但是,(null) 都记录了 self.reuseIdentifier

这是一个问题,因为我想使用相同的UICollectionViewCell 类但使用不同的reuseIdentifiers 来实现外观略有不同的单元格,并且我想在初始化时执行一次样式设置。例如,带有dayCellDisabled reuseIdentifier 的单元格将具有较浅颜色的标签。

【问题讨论】:

为什么不在Interface Builder中配置颜色? 因为我想根据reuseIdentifier应用不同的颜色 我不确定我是否遵循。每个重用标识符都必须与一个单独的 UICollectionViewCell 实例相关联,那么为什么不对 IB 中的每个单元格应用颜色,因为无论如何您都是在那里创建它们的? 说,我想拥有相同的自定义复杂单元格,其中包含两种不同颜色的文本。创建两个单独的 xib 只是为了更改标签颜色并在 IB 中分配不同的重用标识符将是一种浪费。所以,我想根据代码中的reuseIdentifier设置不同的标签颜色。 【参考方案1】:

我发现一个可行的解决方案是不覆盖任何 init 或 awake 方法,而是在此方法中配置我的可重用视图

- (void)didMoveToSuperview ;

显然,当视图被添加到它的处理程序时,这个方法只被调用一次。我测试并确认这是添加到UICollectionView 的可重用UICollectionViewCell 的情况。

【讨论】:

因此您定义了一个属性,并根据您在didMoveToSuperview 中以不同方式初始化单元格的值?我注意到 didMoveToSuperview 不会为集合视图中显示的每个单元格调用。所以确实发生了细胞重用。这对应用程序意味着什么? 我认为您使用了重用标识符。根据您选择此设计或其他设计的值。聪明的!如果您在 didMoveToSuperView 而不是初始化程序中执行此操作,是否存在性能问题? 好吧,如果一个单元被重用,那么您可能希望保持与初始化时相同的配置,所以这不是问题。并且您在作为 tableview 的 dataSource 的视图控制器中应用实际值(字符串、图像)。至于性能问题,我还没有测试过——不过没有明显的减速。

以上是关于带有重用标识符的 UICollectionViewCell 初始化的主要内容,如果未能解决你的问题,请参考以下文章

带有重用标识符的 UICollectionViewCell 初始化

无法将 UICollectionView 的单元格所需的视图出列

UICollectionView 不重用单元格

重用 UICollectionView 中的单元格时,会短暂显示重用 UICollectionViewCell 的旧内容

UICollectionView 不重用单元格

UICollectionView 重用单元格问题