子类化UICollectionViewCell导致永远不会被选中

时间:2013-03-22 20:00:51

标签: ios objective-c uicollectionviewcell

我尝试了对UICollectionViewCell进行子类化并从nib文件加载:

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"DatasetCell" owner:self options:nil];

        if ([arrayOfViews count] < 1) {
            return nil;
        }

        if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]]) {
            return nil;
        }

        self = [arrayOfViews objectAtIndex:0];

        UIView *view = [UIView new];
        view.frame = self.frame;
        view.backgroundColor = [UIColor orangeColor];
        self.selectedBackgroundView = view;
    }

    return self;
}

我遇到了选择单元格的问题,cell.selected未设置。它始终是NO,这导致了取消选择单元格的问题。

如何处理将单元格置于选定状态?

编辑:

我最初将自定义UICollectionViewCell加载为类:

[collectionView registerClass:[DatasetCell class] forCellWithReuseIdentifier:@"dataCell"];

切换到加载笔尖:

[collectionView registerNib:[UINib nibWithNibName:@"DatasetCell" bundle:nil] forCellWithReuseIdentifier:@"nibCell"];

我有两种方式选择/取消选择。

1 个答案:

答案 0 :(得分:3)

主要错误是你已经定义了一个属性

@property (nonatomic) BOOL isSelected;

在自定义UICollectionViewCell子类中(在“DatasetCell.h”中),它会干扰UICollectionViewCell的继承“selected”属性。

如果删除该属性定义,则选择和取消选择按预期工作,至少对于通过registerNib:...从nib文件加载的单元格。

对于通过registerClass:...加载的单元格,会调用initWithFrame。您尝试从那里的nib文件加载单元格。这没有多大意义,似乎无法正常工作。您应该在initWithFrame中以编程方式创建单元格并使用registerClass:,或者在nib文件中创建单元格并使用registerNib:

对于从nib文件加载的单元格,不会调用

initWithFrame,如果要对单元格进行修改,请使用awakeFromNib

希望有所帮助!!