子类化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"]; 

我有两种相同的选择/取消选择问题。

主要错误是您已定义属性

 @property (nonatomic) BOOL isSelected; 

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

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

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

对于从nib文件加载的单元格不调用initWithFrame ,如果要对单元格进行修改,请使用awakeFromNib

希望有所帮助!!