33

UICollectionViewCell表示したいのは画像だけなので、使ってみました。のプロパティを使用UIColor colorWithImage:して、セルに画像を追加できます。UICollectionViewCellcontentView

私のloadView方法では、次のようにセルを登録しています。 [self.collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:@"MyCell"];

以下は私のcellForItemAtIndexPath方法です:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
    // cell customization
    return cell;
}

実行すると、デキューラインに到達するとすぐに、次のエラーでクラッシュします。

*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:]

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier MyCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

カスタムセルを設定するのに疲れて、それをクラスとして使用しましたが、同じエラーが発生しました。私のカスタムセルはUICollectionViewCellをサブクラス化し、デフォルトを除いて何も実装されていませんでしたinitWithFrame。これは、ビューの背景色を変更したかったためです。問題が何であるかはわかりませんが、誰かが私のコードを見て助けてくれませんか?私はこれをかなり長い間理解しようとしてきましたが、まったく運がありませんでした。

4

5 に答える 5

61

画像を表示するだけの場合は、サブクラス化を行う必要はありません。セルを で設定できbackgroundColorますcolorWithPatternImage:。次のようにクラスを登録します。

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];

次に、次のように使用します。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor colorWithPatternImage:[self.results objectAtIndex:indexPath.row]];
    return cell;
}

この例では、 results はarrayofUIImagesです。

于 2012-09-30T05:04:34.157 に答える
15

アプリケーションで xib を使用している場合は、viewdidLoad メソッドに以下を追加します。

    [self.myCollectionView registerNib:[UINib nibWithNibName:@"CollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CellIdentifier"];

それ以外の場合は、ストーリーボードを使用する場合は次を追加します

  [self.myCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CellIdentifier"];

最後にこれを追加します(そうでない場合)

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CellIdentifier" forIndexPath:indexPath];
 return cell;
}

上記の希望が役立ちます。

于 2014-06-18T06:23:19.640 に答える
8

ブレークポイントを設定してみてください

[self.collectionView registerClass:[ImageCell class] forCellWithReuseIdentifier:@"MyCell"];

loadView (つまり、viewDidLoad?) メソッドが呼び出されていないと思います。そのため、クラスが collectionView に登録されることはありません。

于 2012-10-08T21:26:18.353 に答える
7

コレクションビューがストーリーボードに接続されており、デリゲートとデータソースがそこに設定されていて、データソースとデリゲートに必要なメソッドを提供している場合、register呼び出しを追加すると

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

UICollectionView独自のサブクラスの代わりにを返します。したがって、両方ではなく、どちらかを実行します。

于 2013-02-06T09:51:23.553 に答える
4

コードのようにセル識別子名を設定します

ここに画像の説明を入力

于 2014-02-15T09:22:29.650 に答える