2

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

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

4

1 回答 1

3

主要错误是您定义了一个属性

@property (nonatomic) BOOL isSelected;

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

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

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

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

希望有帮助!!

于 2013-03-23T19:00:34.733 回答