30

registerClass:forCellWithReuseIdentifier:メソッドの役割は何ですか?Apple の開発者ドキュメントによると、

"新しいコレクション ビュー セルの作成に使用するクラスを登録します。"

プロジェクトで使用しようとすると、黒いコレクション ビューが表示されます。削除すると、すべて正常に動作します。

#define cellId @"cellId"
#import "ViewController.h"
#import "Cell.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;
@property(strong, nonatomic)NSMutableArray * photoArray;


@end

@implementation ViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSLog(@"%@",_photoArray);
    _photoArray = [[NSMutableArray alloc]initWithCapacity:0];
    [_collectionView registerClass:[Cell class] forCellWithReuseIdentifier:cellId];
    for(int i=1;i<=12;i++)
    {
        NSString * imgName = [NSString stringWithFormat:@"%d.png",i];
        UIImage *img  = [UIImage imageNamed:imgName];
        [_photoArray addObject:img];
    }
}


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return _photoArray.count;
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    Cell* cell = [_collectionView  dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
    cell.cellImage.image = [_photoArray objectAtIndex:indexPath.row];
    return cell;
}
4

2 に答える 2

36

Storyboard で既に UICollectionView を作成し、 と を接続しdataSourcedelegate必要なメソッドをすべて追加している場合:

その場合、registerClass/registerCellメソッドは必要ありません。ただし、ビュー、データ、またはセルを再利用する必要がある場合は、iOS が必要に応じて UICollectionView を設定できるように、これらのメソッドを使用する必要があります。これは、ストーリーボードでプロトタイプ セルを設定することによっても実行できます(メソッドと同じ原理) registerClass

registerCellまた、何が機能し、どのように使用するかについての適切な説明を探している場合は、このリンクをチェックして、「セルとビューの再利用」というタイトルの一番下のセクションまでスクロールしてください。

于 2012-10-14T17:58:36.907 に答える
4

RazorSharpの回答に同意し、 Techtopiaリンクでの私にとっての重要なフレーズは次のとおりであることを指摘したいと思います。

セルクラスがコードで記述されている場合、登録はUICollectionViewのregisterClass:メソッドを使用して実行されます。それ以外の場合は、registerNibを使用します。

于 2013-01-20T10:06:12.000 に答える