9

初めて UICollectionView をいじり始めたところです。うまく機能しているようですが、問題と質問があります。

以下のようにUICollectionViewをセットアップし、カスタムセルを使用しています。

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section
{
    return 10;
}

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

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    ContactCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    cell.nameLbl.text = @"text";

    return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(145, 95);
}

- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(10, 10, 10, 10);
}

したがって、これはすべてダンディですが、次の行をに追加しましたviewDidLoad:

[collectionView registerClass:[ContactCell class] forCellWithReuseIdentifier:@"Cell"];

これは問題を引き起こしていますが、その理由はわかりません。この行を有効にすると、すべてのセルが空白になります。どうして?私は何が欠けていますか?

また、私が理解しているように、その行で再利用可能なセルが有効になっている場合、コレクション ビューを使用する必要があるのに、テーブル ビューでは必要がないのはなぜですか?

4

2 に答える 2

26

ストーリーボードは、インターフェイス ビルダーの右側のペインでそのセルに指定した再利用識別子に対して、ストーリーボードで設計したセルを自動的に登録します。その再利用識別子のクラスを再登録することにより、コレクション ビューは単にサブクラスで alloc init を呼び出し、ビューがプログラムによってセットアップされることを期待します。

ドキュメントから:

同じ再利用識別子を持つクラスまたは nib ファイルを以前に登録した場合、cellClass パラメータで指定したクラスが古いエントリを置き換えます。指定した再利用識別子からクラスを登録解除する場合は、cellClass に nil を指定できます。

ストーリーボードの外でセルを設計する場合は、プログラムでインターフェイスをセットアップするか、別の xib でセルをセットアップしてから呼び出すことができます。

- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier

nib には、インターフェイス ビルダーで設定された適切な再利用識別子を持つカスタム サブクラスのセルである 1 つのトップ レベル ビューが必要です。

于 2012-11-05T00:42:03.397 に答える