为UICollectionView
创建单元格时,dequeueReusableCellWithReuseIdentifier
不会通过init
或initWithCoder
的CategoryView
函数。
视图正在创建,它具有适当的类型(CategoryView
),但是没有调用init
的initWithCoder
或CategoryView
,因此未执行基本功能。在这个Senario中还有其他init吗?
- (CategoryView *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CategoryView *cell = [cv dequeueReusableCellWithReuseIdentifier:@"CategoryView" forIndexPath:indexPath];
[cell someConfiguration];
return cell;
}
最佳答案
在这种情况下,问题在于没有在Interface Builder中为您的单元原型指定基类。因此,请确保已设置基类:
然后,当您使用在原型单元中指定的情节提要标识符调用dequeueReusableCellWithReuseIdentifier
时,在首次实例化该单元时会调用initWithCoder
。如果单元格滚动到视线之外,以后又用于另一个NSIndexPath
,则 prepareForReuse
称为:
@interface CategoryView : UICollectionViewCell
@end
@implementation CategoryView
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
if (self) {
NSLog(@"init");
}
return self;
}
- (void)prepareForReuse {
[super prepareForReuse];
NSLog(@"reuse");
}
@end
关于ios - dequeueReusableCellWithReuseIdentifier不通过init或initWithCoder函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24122043/