RCB
RCB

Reputation: 2263

iOS : Collection view doesn't show

I have a collection view in my app, I want it to contain a custom cells. I've created a custom cell view xib file. Then I use it in my data source method :

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
 OtherCustomersCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:OTHER_CUSTOMERS_CELL_IDENTIFIER forIndexPath:indexPath];

  if(cell == nil){
      NSArray *nsObjects = [[NSBundle mainBundle] loadNibNamed:@"OtherCustomersCell" owner:nil options:nil];
    for(id obj in nsObjects)
        if([obj isKindOfClass:[OtherCustomersCell class]])
            cell = (OtherCustomersCell*) obj;
}
[cell.name setText:@"AAAA BBBBB"];

return cell;
}

But when I run the app, there is just a black rectangular where the collection view should be (at the bottom under the table view):

enter image description here

What am I doing wrong? Thank you in advance.

Upvotes: 0

Views: 3519

Answers (2)

Fabian Kreiser
Fabian Kreiser

Reputation: 8337

Collection views work differently than table views in that you don't have to create a cell if one can't be dequeued.

Instead, you have to register the nib for the cell first:

- (void)viewDidLoad
{
    ...

    UINib *cellNib = [UINib nibWithNibName:@"OtherCustomersCell" bundle:nil];
    [collectionView registerNib:cellNib forCellWithReuseIdentifier:OTHER_CUSTOMERS_CELL_IDENTIFIER];
}

You can then dequeue the cell and it will be created automatically for you if necessary:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    OtherCustomersCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:OTHER_CUSTOMERS_CELL_IDENTIFIER forIndexPath:indexPath]; // cell won't be nil, it's created for you if necessary!
    [cell.name setText:@"AAAA BBBBB"];

    return cell;
}

Upvotes: 4

Exploring
Exploring

Reputation: 935

You have to register UICollectionView instance in the following way in viewdidload then you can use this.

[self.photoListView registerNib:[UINib nibWithNibName:@"UIcollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"Identifier"];

Upvotes: 2

Related Questions