2013-04-11 4 views
6

私は実際には、私のUICollectionViewに「静的な」セルを提供したいと思っています。昔、UITableViewを使っていました。しかし私は良い男の子と女の子がdequeueReusableCellWithReuseIdentifier:forIndexPath:を私たちの細胞のための工場として使わなければならないことを知っています。だから私は以下の計画を提案し、その可能性についてのフィードバックを要求する。これまでのところ、それは私のために働いていますが、私は未知の落とし穴を恐れています。データソースのcellForPath:?内からUICollectionViewのdequeueCell:を呼び出す必要がありますか?

#import "MyCellClass.h" 

@implementation MyViewController { 
    MyCellClass *_cell0; // etc - many are possible. could store in array 
} 

-(void)viewDidLoad { 
    // assume MyCellClass has a +nib and +reuseId. The reader understands. 
    [_collectionView registerNib:[MyCellClass nib] forCellWithReuseIdentifier:[MyCellClass reuseId]]; 
} 

-(void)viewDidAppear:animated { 
    // this is where the fun begins. assume proper counts coming from the datasource 
    NSIndexPath *indexPath = [NSIndexPath indexPathWithRow:0 inSection:0]; 
    _cell0 = [[self collectionView] dequeueReusableCellWithReuseIdentifier:[MyCellClass reuseId] forIndexPath:indexPath]; 
    // etc 
} 

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    if ([indexPath row] == 0) return _cell0; 
    // etc 
} 

私は意図的に細胞を構成するなどの詳細を光沢させる。狂気?天才?ただ現状維持?これまでのところうまくいっているようですが、何とかAppleがdequeuecellForPathの中から呼び出そうとしていることを恐れています。何かご意見は?

+2

本当の答えは「あなたはそれをする必要はありません」と思います。 :) – Fattie

答えて

3

応答:

アプリの作品を言っていますが、実際にデータソース 方法「cellForItemAtIndexPath」の中から 「dequeueReusableCellWithReuseIdentifier」を使用する必要があります。これはサポートされている使用パターンです。 MyCellClassを保持しようとしないで、コレクションビューで を管理させ、必要に応じてデキューするように要求します。

私はちょっと注意してコードを変更して、拡張要求を発行します。しかし、私はそれがうまくいったことを伝えます!

3

dequeueReusableCellWithReuseIdentifier:forIndexPath:を呼び出す唯一の理由は、セルを再利用することです。しかし、 "静的な"コレクションビュー?私たちは何匹の細胞について話していますか?スクロールしないようなコレクションビューがあれば、私はセルを全く再利用することを迷惑にならないと考えています。 そのは、問題をきちんと解決します。結局のところ、ストーリーボードの静的テーブルはセルを再利用していません。それは静的にするものです。だから私は、dequeueReusableCellWithReuseIdentifier:forIndexPathについてのものを一杯落として、尋ねられたらセルを供給するだけと言うでしょう。

dequeueについては何も魔法はありません。それは、再利用パイルに細胞があるかどうかを調べ、そうであればそれを得る方法です。結局のところ、iOS 4などでテーブルビューがどのように機能していたかを考えてみましょう。dequeueと言っていましたが、返すべき再利用可能なセルがなければ、テーブルはnilを返すので、自分のセルをalloc-initにしたり、 自分でさて、あなたはのすべてのアイテムをコレクションビューに表示するように提案しています。先に進んでください。アップルTSIガイから

+0

私は同意します - 我々は約6セル、大きな、4ページ(水平スクロール)を話しています。このために。私は将来の変化を予期する。現時点では少し面倒です。私は原則としてあなたに同意しますが、状況の詳細にはこのようなことが求められます。 – QED

+0

細胞の供給に関しては、私はそれらをデキューする必要があると思いました。/init/loadNibを割り当てることはできますか?とにかく、この場合はやりたいと思います。 – QED

+0

絶対に。私の答えで言ったように、デキューする唯一の理由は、それらを再利用杭から外すことです。あなたが再使用していない場合、あなたはそれをする必要はありません。そして、それらを前面からすべて取り出すので、あなたはすでにそれらを再利用していません。 – matt

0

私のMBStaticCollectionViewをチェックすると、データソースを定義する必要なしにInterface Builderから静的なUICollectionViewセルを定義することができます。