UICollectionView创建单元格时,dequeueReusableCellWithReuseIdentifier不会通过initinitWithCoderCategoryView函数。

视图正在创建,它具有适当的类型(CategoryView),但是没有调用initinitWithCoderCategoryView,因此未执行基本功能。在这个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/

10-12 04:21