2012-12-22 24 views
10

私はカスタムUICollectionViewCellを実装しています。データを使用してセルのサブビューを初期化できるようにモデルデータを送信する方法を知りたいと思います。iOSサブクラスUICollectionViewCellカスタムの初期化メソッド

私が直面してる問題はときにセルのISN」である

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

MyCollectionViewCell* cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; 

...私は..

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

と、次の方法で操作を実行して、私のMyCollectionViewCellを登録再利用キューの中で、initWithFrameメソッドを呼び出すことによって新しいセルを初期化します(ドキュメントが確認する必要があります)。しかし、私は私のMyCollectionViewCellクラス、カスタムのinitメソッドを持っている...

-(id) initWithFrame:(CGRect)frame withData: (NSDictionary*) data; 

私は私のカスタムではなく、呼び出されるメソッドを初期化します。どうすればいい?私はニブを使用していないので、私はプログラムですべてをやっています。

方法がない場合、代わりにinitWithFrameメソッドを使用する必要があります。そのデータでサブビューを初期化できるように、モデルデータをMyCollectionViewCellに渡す方法はありますか?

ありがとうございます!

答えて

6

デキューした直後の[cell initData:data]はどうですか。とにかくデキューされたセルのデータを再初期化する必要があるかもしれません。

+0

これです。セルを再利用する場合は、initWith ...何も渡さないので、データの設定はinitメソッドとは別に行う必要があります。 – jrturton

+1

ただし、initDataとは呼ばないでください。 configureForDataまたはsetData(データがプロパティの場合)と何かを呼び出します。 init ...メソッドは、新しく割り当てられたオブジェクトに対してのみ呼び出されるべきです。 – jrturton

+0

それは理にかなっています。 setDataを呼び出してモデルデータを渡した後、セルをトリガーしてUIをリロードするにはどうすればよいですか? setNeedsLayoutを呼び出し、カスタムセルに - (void)layoutSubviewsメソッドを持っていますか? –

0

もう一つのオプションは、layoutAttributesオブジェクトにデータへのポインタを与え、そのセルをそのapplyLayoutAttributes:メソッドで取得させることです。

関連する問題