我尝试了对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"];
我有两种方式选择/取消选择。
答案 0 :(得分:3)
主要错误是你已经定义了一个属性
@property (nonatomic) BOOL isSelected;
在自定义UICollectionViewCell子类中(在“DatasetCell.h”中),它会干扰UICollectionViewCell的继承“selected”属性。
如果删除该属性定义,则选择和取消选择按预期工作,至少对于通过registerNib:...
从nib文件加载的单元格。
对于通过registerClass:...
加载的单元格,会调用initWithFrame
。您尝试从那里的nib文件加载单元格。这没有多大意义,似乎无法正常工作。您应该在initWithFrame
中以编程方式创建单元格并使用registerClass:
,或者在nib文件中创建单元格并使用registerNib:
。
initWithFrame
,如果要对单元格进行修改,请使用awakeFromNib
。
希望有所帮助!!