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の継承された"selected"プロパティに干渉します。

そのプロパティ定義を削除すると、少なくとも、nibファイルから。を介してロードされたセルに対して、選択と選択解除が期待どおりに機能しますregisterNib:...

を介してロードされたセルの場合registerClass:...initWithFrameが呼び出されます。そこにあるnibファイルからセルをロードしようとします。それはあまり意味がなく、正しく機能していないようです。プログラムでセルを作成してinitWithFrameを使用するregisterClass:か、nibファイルでセルを作成してを使用する必要がありますregisterNib:

initWithFramenibファイルからロードされたセルに対しては呼び出されませんawakeFromNib。セルに変更を加える場合に使用します。

お役に立てば幸いです!!

于 2013-03-23T19:00:34.733 に答える