带有重用标识符的 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 方法可以让我访问单元格的reuseIdentifier
? awakeFromNib
和 initWithCoder:
方法都被调用,但是,(null)
都记录了 self.reuseIdentifier
。
这是一个问题,因为我想使用相同的UICollectionViewCell
类但使用不同的reuseIdentifier
s 来实现外观略有不同的单元格,并且我想在初始化时执行一次样式设置。例如,带有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 中的单元格时,会短暂显示重用 UICollectionViewCell 的旧内容