4

UICollectionViewCellいくつかの配色のいずれかを使用して描画されるカスタム背景ビューを持つカスタムがあります。背景ビューの配色は、-(id)initWithFrame:andColourPalette:ビューのカスタム初期化子で設定されます。

サブクラスに同様のカスタム初期化子がありますがUICustomViewCell、セルをセットアップするときにこの初期化子を呼び出す方法がわかりませんcellForItemAtIndexPath:

誰でも私がこれを行うのを手伝ってもらえますか? または、この色のディクショナリをセルに渡してサブビューに渡すための代替ソリューションを提供しますか?

詳細を表示するために編集します。

これは、UICollectionView VC にあるものです。

ViewWillAppear で:

[self.collectionView registerClass:[OPOLawCollectionViewCell class] forCellWithReuseIdentifier:CELL_ID];
self.colourPalette = [OPOColourPalette greenyColourPalette];

cellForItemAtIndexPath:

UICollectionViewCell *cell          = [collectionView dequeueReusableCellWithReuseIdentifier:CELL_ID forIndexPath:indexPath];
OPOLawCollectionViewCell *lawCell   = (OPOLawCollectionViewCell *)cell;

MainLevel *level                    = self.collectionData[indexPath.row];
lawCell.delegate                    = self;
lawCell.colourPalette               = self.colourPalette;

私のカスタムUICollectionViewCellで

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        // get background view
        OPOLawBook *lawBookView = [[OPOLawBook alloc]initWithFrame:CGRectMake(0, 0, 200, 265) andColourPalette:self.colourPalette];

しかし、それは機能しません-プロパティが設定されていないためだと思います。

最後の行をこれに変更すると、正常に動作します。

    OPOLawBook *lawBookView = [[OPOLawBook alloc]initWithFrame:CGRectMake(0, 0, 200, 265) andColourPalette:[OPOColorPalette greenyColorPalette]];

ここでカスタム初期化子を使用する必要があると思いますが、それを呼び出す方法、またはどこからかわかりません...

ありがとう

4

3 に答える 3

12

ユオは、collectionView に customCells を登録する必要があります。

[self.collectionView_ registerClass:[YourCustomClass class]
        forCellWithReuseIdentifier:@"CustomCell"];

そして、あなたの方法でcellForItemAtIndexPath

 YourCustomClass *cell = (YourCustomClass *)[collectionView 
         dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];

これは、collectionView に 1000 個のセルと 10 個の表示がある可能性があるためです。それらすべてを初期化したままにして、可能な場合は再利用するわけではありません。

編集

colorPaletter再利用可能なセルをデキューした後に設定する必要があります。任意の色を保持できるコンテナーと考え​​てください。ペイントする色を (indexpath によって) 決定する必要があります。

于 2013-07-01T14:00:05.893 に答える
2

カスタム セルが にある場合は、以下を実行しないでくださいStoryboard

[self.collectionView registerClass:[OPOLawCollectionViewCell class] forCellWithReuseIdentifier:CELL_ID];

自分Storyboardで登録する責任があるからCell_IDです。ここで、両方を使用すると無効なセルが生成されて競合します。

于 2014-05-16T01:52:28.630 に答える
2

ウェイオフ、すべての答え。質問者は、初期化時に各セルを一意に識別する方法を探しています。これは、セルをデキューする前、およびセルがインデックス パス プロパティにアクセスする前に行われます。

これを行う唯一の方法は、インデックス パスの値に基づいてすべてのセルに一意の再利用識別子を割り当てることです (それが何であるかを知っていると仮定すると、あなたの場合はそうなるでしょう)。次に、セルをデキューするときに、インデックス パスを使用して、対応する再利用識別子を持つセルを見つけます。

これは、識別子を再利用する目的を無効にしますか? 絶対違う。再度使用する必要があるたびに、そのセルを再利用することになります。識別子の再利用は、コレクション ビュー内のすべてのセルを型にはまったセルに制限することを意図したものではありません。それらはまた、「一意の使用」識別子であることを意図しています。

于 2016-07-25T07:48:09.550 に答える