2013-10-07 25 views
6

Bei Verwendung meiner benutzerdefinierten Unterklasse UICollectionViewLayout wird cellForItemAtIndexPath: nicht aufgerufen (ich überprüft mit Haltepunkten und Debug-Ausgabe). Dies ist, wie ich das benutzerdefinierte Layout verwenden:cellForItemAtIndexPath: wird nicht aufgerufen, wenn benutzerdefinierte UICollectionViewLayout-Unterklasse verwendet

- (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"]; 
    } 

Aber wenn ich den obigen Code ändern UICollectionViewFlowLayout statt meiner benutzerdefinierten Unterklasse zu verwenden, wird cellForItemAtIndexPath: genannt.

Könnte es sein, dass ein Code aus meiner benutzerdefinierten Layoutunterklasse verhindert, dass cellForItemAtIndexPath aufgerufen wird?

+0

Ja könnte es. Sie müssen einige davon anzeigen. Wenn das Layout beispielsweise keine Größe für die Sammlungsansicht oder eine beliebige Größe für die Layoutobjekte zurückgibt, wird nie eine Zelle erstellt. Haben Sie alle Methoden implementiert, wie in der Dokumentation beschrieben? – jrturton

+0

Vielen Dank. Ich habe den Ursprung der Zellenframes vermasselt ... es war außerhalb des sichtbaren Bereichs. Es war also richtig, dass 'cellForItemAtIndexPath' nicht aufgerufen wurde. – flather

+0

Ok, ich habe meinen Kommentar als Antwort gegeben, damit du diesen hier schließen kannst. – jrturton

Antwort

5

Wenn das Layout beispielsweise keine Größe für die Auflistungsansicht oder eine beliebige Größe für die Layoutobjekte zurückgibt, wird nie eine Zelle erstellt. Außerdem müssen sich die Rahmen in den Layout-Objekten im sichtbaren Bereich der Sammlungsansicht befinden.

Verwandte Themen