7

Sto cercando di visualizzare un UICollectionView all'interno di un controller di visualizzazione presentato in modo modale. L'applicazione è per iPad iOS 7.Impossibile ottenere UICollectionView per visualizzare le celle

ho creato sottoclasse di UIViewController (con pennino) e ha aggiunto in questo modo:

MyViewController *controller = [[MyViewController alloc] init]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; 
navController.modalPresentationStyle = UIModalPresentationFullScreen; 
navController.navigationBar.barStyle = UIBarStyleBlackTranslucent; 

[self presentViewController:navController animated:YES completion:nil]; 

Questo controller di vista è quello di essere il delegato e DataSource per il mio UICollectionView quindi ho aggiunto UICollectionViewDataSource e UICollectionViewDelegate all'intestazione.

ho messo un UICollectionView nel pennino e ha aggiunto una presa di MyViewController:

@property (strong, nonatomic) IBOutlet MyCollectionView *collectionViewController; 

Ho aggiunto questo viewDidLoad in MyViewController:

self.collectionViewController.dataSource = self; 
self.collectionViewController.delegate = self; 

Ho anche aggiunto il seguente a MyViewController:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    NSLog(@"Items in section: %d", itemsArray.count); // returns correct amount 

    return itemsArray.count; 
} 


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"cellForItemAtIndexPath %@", indexPath); // returns as expected 

    static NSString *identifier = @"MyCell"; 

    [self.collectionViewController registerClass:[MyCollectionCell class] forCellWithReuseIdentifier:identifier]; 

    MyCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; 

    UIImageView *myImageView = (UIImageView *)[cell viewWithTag:100]; 
    myImageView.image = [UIImage imageNamed:[itemsArray objectAtIndex:indexPath.row]]; 

    return cell; 
} 

Ho anche creato una sottoclasse di UICollection ViewCell con l'identificatore impostato su MyCell e aggiunto a UIImageView con il tag 100.

Ogni volta che faccio apparire questo controller di visualizzazione sto ottenendo la barra di navigazione come previsto, ma la vista UICollection che ho aggiunto al mio pennino non si vede da nessuna parte. Tutto quello che vedo è nero dove dovrebbe essere la vista raccolta. Se cambio il colore di sfondo di MyCollectionView da predefinito a bianco, vedo bianco dove dovrebbe essere la vista di raccolta. Sembra che venga visualizzato MyCollectionView, ma non mostra alcuna cella.

+0

[Hai seguito il tutorial Appcoda?] (Http://www.appcoda.com/ios-collection-view-tutorial/) –

risposta

20

Se si collega la propria collectionView e i propri dataSource e si delega nel file xib, non è necessario impostarlo sul proprio codice.

Successivamente, è necessario registrare l'UICollectionViewCell:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Register Nib 
    [self.collectionView registerNib:[UINib nibWithNibName:CollectionViewCell_XIB bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:CollectionViewCell_ID]; 
} 

CollectionViewCell_XIB è il nome del XI ter cellulare CollectionViewCell_ID è l'ID del tuo cellulare

ed è necessario implementare cellForItemAtIndexPath in questo modo:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CollectionViewCell *cell = (CollectionViewCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:CollectionViewCell_ID forIndexPath:indexPath]; 

    // Configure cell with data 
    UIImageView *myImageView = (UIImageView *)[cell viewWithTag:100]; 
    myImageView.image = [UIImage imageNamed:[itemsArray objectAtIndex:indexPath.row]]; 

    // Return the cell 
    return cell; 
} 
+1

Totalmente fantastico, signore. Grazie! – beev

+3

siete i benvenuti;) non esitate ad aggiungere +1: p –

24

Un altro punto di interesse è che se si imposta l'identificativo della cella nel pennino o nello storyboard, non registrare il pennino/la classe nel controller della vista collezione. Fai l'uno o l'altro, ma non entrambi.

+4

Incredibile, mi sono imbattuto nello stesso problema e questo risolto. –

+3

Questo era il problema per me. Thx –

+0

QUESTO !!!! omg non posso crederci – SteBra

Problemi correlati