8

我试图让 UICollectionView 显示在模态呈现的视图控制器中。该应用程序适用于 iPad iOS 7。

我创建了 UIViewController 的子类(带有笔尖)并像这样添加它:

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

此视图控制器将成为我的 UICollectionView 的委托和数据源,因此我已将 UICollectionViewDataSource 和 UICollectionViewDelegate 添加到标题中。

我已将 UICollectionView 放入 nib 并向 MyViewController 添加了一个插座:

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

我在 MyViewController 的 viewDidLoad 中添加了这个:

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

我还在 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;
}

我还设置了一个 UICollectionViewCell 的子类,其标识符设置为 MyCell,并向其中添加了一个标签为 100 的 UIImageView。

每当我调出这个视图控制器时,我都会按预期获得导航栏,但是我添加到我的笔尖的 UICollection 视图无处可见。我所看到的只是集合视图应该是黑色的。如果我将 MyCollectionView 的背景颜色从默认更改为白色,我会看到集合视图应该是白色的。它似乎正在调出 MyCollectionView,但没有显示任何单元格。

4

2 回答 2

25

另一个有趣的地方是,如果您在 nib 或情节提要中设置单元格的标识符,请不要在集合视图控制器中注册 nib/类。做一个或另一个,但不要两者都做。

于 2013-11-07T13:23:19.927 回答
21

如果你在你的 xib 文件中链接你的 collectionView 和它自己的数据源和委托,你不需要在你的代码上设置它。

接下来,您需要注册您的 UICollectionViewCell :

- (void)viewDidLoad 
{
    [super viewDidLoad];

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

CollectionViewCell_XIB是您的单元格名称 xib CollectionViewCell_ID是您的单元格的 ID

你需要cellForItemAtIndexPath像这样实现:

- (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;
}
于 2013-09-30T13:43:02.437 回答