2013-10-07 15 views
6

カスタムUICollectionViewLayoutサブクラスを使用する場合、cellForItemAtIndexPath:はコールされません(ブレークポイントとデバッグ出力を使用してチェックしました)。cellForItemAtIndexPath:カスタムUICollectionViewLayoutサブクラス使用時に呼び出されない

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     DMSGridLayout* gridLayout = [[DMSGridLayout alloc] init]; 

//  UICollectionViewFlowLayout* flow = [[UICollectionViewFlowLayout alloc] init]; 
//  [flow setItemSize:CGSizeMake(150, 150)]; 

     UICollectionView *collection = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:gridLayout]; 
     collection.delegate = self; 
     collection.dataSource = self; 
     self.collectionView = collection; 

     [self.view addSubview:self.collectionView]; 
     [self.collectionView registerClass:[DMSGridCell class] forCellWithReuseIdentifier:@"CollectionCell"]; 
    } 

しかし、私が代わりに私のカスタムサブクラスのUICollectionViewFlowLayoutを使用するために上記のコードを変更すると、cellForItemAtIndexPath:が呼び出されます。これは私がカスタムレイアウトを使用する方法です。

私のカスタムレイアウトのサブクラスのコードによってはcellForItemAtIndexPathが呼び出されないことがありますか?

+0

はい、可能です。そのレイアウトの一部を表示する必要があります。たとえば、レイアウトがコレクションビューのサイズやレイアウトオブジェクトのサイズを返さない場合、セルは決して作成されません。ドキュメントに記載されているすべてのメソッドを実装しましたか? – jrturton

+0

ありがとうございました。私は細胞のフレーム起源を台無しにしました...それは可視領域の外でした。だから 'cellForItemAtIndexPath'が呼び出されていないのは間違いです。 – flather

+0

さて、私は答えとして私のコメントを入れたので、これを閉じることができます。 – jrturton

答えて

5

たとえば、レイアウトがコレクションビューのサイズやレイアウトオブジェクトのサイズを返さない場合、セルは決して作成されません。また、レイアウトオブジェクト内のフレームは、コレクションビューの可視領域内になければなりません。