自分自身をインスタンス化し、に追加しUICollectionViewCell
たい特定のものがあります。これが機能するためには、インスタンスのプロパティを設定する必要があります。UICollectionView
UICollectionViewCell
.reuseIdentifier
通常、セルを説明するクラスまたはNibはコレクションビューに登録され、コレクションビューは、.reuseIdentifier
次のメソッドを使用して、すでに設定されているセルをインスタンス化します。
- registerClass:forCellWithReuseIdentifier:
- registerNib:forCellWithReuseIdentifier:
ただし、このセルはコレクションビューの外部で作成しているため、これらは適用されません。
自分でセルを作成すると、セルを設定する方法がないように見えます.reuseIdentifier
(これは読み取り専用プロパティであり、init...
初期化するメソッドがないため)。
.reuseIdentifier
が設定されていない場合UICollectionView
、セルが追加されたときに例外がスローされます。UITableView
この動作は、再利用識別子がオプションであったとは異なります。
コレクションビューセルの再利用識別子を設定する簡単な回避策は、それを.xib
ファイルに埋め込み、Identifier
ボックスを使用してから、次のようにしてセルのインスタンスを作成することです。
[NSBundle.mainBundle loadNibNamed:@"MyCellName" owner:self options:nil][0];
その後、上記のインスタンスを渡すことができ、UICollectionViewCell
すべてが正常に機能します。
...しかし、それはジャンプするのにかなりばかげた恣意的なフープのようです。.xib
-wrapper迂回なしでセルインスタンスにこのプロパティを設定する他の方法はありますか?
更新:Appleのドキュメントには次のように書かれています:
コードの作成プロセスを簡素化するために、コレクションビューでは、コードでビューを明示的に作成するのではなく、常にビューをデキューする必要があります。
...これは実際には当てはまりません。これは必要ないためです(つまり、外部からインスタンス化されたセルは、識別子が何らかの方法で設定されている限り、たとえばからロードされた場合など、正常に機能します.xib
)。また、「私の特定のユースケースでは、「コードの作成プロセス」(追加のファイルが必要です。さらに、コレクションビューでこれらのいくつかの複雑な1回限りの作成を要求するのは面倒です)。
ただし、上記は、質問に対する答えが「いいえ」であることを意味しているようです。コレクションビューでセルをデキューする場合を除いて、使用可能なセルを作成することは意図的に「困難」です。