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;
}
StoryboardでUICollectionViewを既に作成し、dataSource
とdelegate
を接続し、必要なメソッドをすべて追加している場合:
numberOfItemsInSection
numberOfSectionsInCollectionView
cellForItemAtIndexPath
その場合、registerClass
/registerCell
メソッドは不要です。ただし、ビュー、データ、またはセルを再利用する必要がある場合は、これらのメソッドを使用して、iOSが必要に応じてUICollectionViewを作成できるようにする必要があります。これは、ストーリーボードでPrototype Cellを設定することでも実行できます(registerClass
メソッドと同じ原理。
また、registerCell
の機能とその使用方法に関する適切な説明を探している場合は、 このリンク を確認し、「セルとビューの再利用」というタイトルの下部セクションまでスクロールしてください。
RazorSharpの答え に同意し、 Techtopiaリンク のキーフレーズが次のとおりであることを指摘します。
セルクラスがコードで記述されている場合、登録はUICollectionViewのregisterClass:メソッドを使用して実行されます。それ以外の場合はregisterNibを使用します