7

Ich versuche, eine UICollectionView in einem modal präsentierten View-Controller anzuzeigen. Die App ist für iPad iOS 7.UICollectionView kann nicht zum Anzeigen von Zellen verwendet werden

ich Unterklasse von UIViewController (mit einer Feder) erstellt haben und fügte hinzu, es wie folgt aus:

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]; 

Diese View-Controller ist der Delegierte und Datenquelle für meine UICollectionView zu sein also habe ich UICollectionViewDataSource und UICollectionViewDelegate zur Kopfzeile hinzugefügt.

Ich habe eine UICollectionView in die Spitze setzen und einen Auslass zu MyViewController hinzugefügt:

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

ich dies in viewDidLoad in MyViewController hinzugefügt haben:

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

ich auch hinzugefügt haben die folgende zu 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; 
} 

Ich habe auch eine Unterklasse von UICollection eingerichtet ViewCell mit dem Bezeichner auf MyCell gesetzt und ein UIImageView mit dem Tag 100 hinzugefügt.

Immer wenn ich diesen View-Controller erstelle, bekomme ich die Navigationsleiste wie erwartet, aber die UICollection-Ansicht, die ich zu meiner Feder hinzugefügt habe ist nirgendwo zu sehen. Alles, was ich sehe, ist schwarz, wo die Ansicht der Sammlung sein sollte. Wenn ich die Hintergrundfarbe von MyCollectionView von standardmäßig auf weiß ändere, sehe ich weiß, wo die Sammlungsansicht sein sollte. Es scheint MyCollectionView aufzurufen, zeigt jedoch keine Zellen an.

+0

[Haben Sie Appcoda Tutorial?] (Http://www.appcoda.com/ios-collection-view-tutorial/) –

Antwort

20

Wenn Sie Ihren collectionView und seine eigene dataSource und delegate in Ihrer xib-Datei verknüpfen, müssen Sie dies nicht in Ihrem Code einrichten.

Als nächstes müssen Sie Ihre UICollectionViewCell registrieren:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

CollectionViewCell_XIB ist der Name Ihrer Zelle xib CollectionViewCell_ID die ID Ihrer Zelle

ist, und Sie müssen cellForItemAtIndexPath wie folgt umzusetzen:

- (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

Total genial, Herr. Vielen Dank! – beev

+3

Gern geschehen;) Zögern Sie nicht, +1 hinzuzufügen: p –

24

Ein weiterer interessanter Punkt ist, dass Sie die Kennung der Zelle festlegen Speichern Sie in der NIB oder im Storyboard die Schreibfeder/Klasse nicht im Sammlungsansicht-Controller. Tun Sie das eine oder das andere, aber nicht beides.

+4

Erstaunlich, ich lief in das gleiche Problem und das löste es. –

+3

Das war das Problem für mich. Thx –

+0

DIESES !!!! Oh, ich kann es nicht glauben – SteBra