【问题标题】:UICollectionView - Not displaying cellsUICollectionView - 不显示单元格
【发布时间】:2014-01-17 21:30:55
【问题描述】:

我想要实现的是一个带有UICollectionView 的 3x3 表。但它只是在运行应用程序时不显示任何单元格。它确实显示了CollectionView 的背景颜色(我设置为蓝色)有人可以帮我吗?

我所做的是创建一个storyboard 并简单地将CollectionViewController 拖到它上面。这个控制器还带来了一个嵌套的CollectionView。然后我简单地使用设置将其背景设为蓝色并添加一个单元格,我将背景设为紫色(两者都仅用于测试)。最后将UILabel 拖到上面。现在运行时它只显示蓝色背景,但没有单元格,即使它们在编辑器中清晰可见。然后我尝试创建一个自定义UICollectionViewController,将类分配给CollectionViewController 而不是标准类,并对单元格执行相同操作(分配一个自定义UICollectionViewCell)。在自定义UICollectionViewController中我实现了以下方法:

-(NSIntegear)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 9;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    AboutYourGoalsMultiSelectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    [[cell goal]setText:@"T"];

    return cell;
}

我将单元格的标识符设置为“Cell”,并在 CollectionView 和自定义 UICollectionViewController 之间建立了 dataSource 和委托的出口连接。一切都编译得很好。 那么我错过了什么?在简单地使用编辑器进行所有这些调整之前,它不应该显示一些东西吗?

【问题讨论】:

  • CollectionViewCell 的单元格标识符是否设置为“Cell”?
  • 是的,Collection Reusable View > Identifier 设置为“Cell”并且 Identity > Restoration ID 也是
  • 什么都没有。我会在collectionView:cellForItemAtIndexPath: 中设置一个断点来a) 确保它被调用,b) 看看还有什么问题。

标签: ios objective-c ipad uicollectionview


【解决方案1】:

See my answer here,简而言之,如果您正在使用情节提要,则需要删除此行

 // Register cell classes
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];

【讨论】:

【解决方案2】:

一个常见的错误来源是数据源和委托未在 Outlets 中设置

【讨论】:

  • 正如我现在必须了解的,另一个非常令人沮丧的错误来源是 AutoLayout:确保 UICollectionView 不会被压缩到零大小。
  • 好提示!您可以将UICollectionView 的大小设置为CGRect.zero,但是当将其设置为大于CGRect.zero 的值时,请在集合视图上调用reloadData() 以显示单元格。
  • 如果您因无法识别的选择器而崩溃,请确保您的视图控制器具有正确的自定义类!
【解决方案3】:

您的代码的第一行有错误。

-(NSIntegear)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

NSIntegear 应该是NSInteger

不确定这是否是问题所在,因为 xcode 不应允许您在运行项目时出现此错误。我只是尝试按照您提到的完全相同的步骤(没有标签),但经过上述更正,它对我来说效果很好。截图如下:

【讨论】:

    【解决方案4】:

    由于我没有找到直接的解决方案,因此我尝试建立一个新项目并进行了相同的更改和调整,令人惊讶的是,这一次,一切都从一开始就奏效了。然后我将情节提要复制到我的旧项目中,删除了所有旧文件并将其替换为新项目中的文件。到目前为止,一切都运行良好。我不知道实际的错误是什么,但我很高兴它现在正在工作。感谢所有看过我问题的人!

    【讨论】:

      【解决方案5】:

      如果您尝试创建一个简单的 CollectionViewController(不是自定义的,即通过实现)并且您的单元格在应用程序运行时未显示,请按照以下步骤操作:-

      • 首先,您必须为您的 UICollectionViewController 创建可可触摸类(如果未创建)。 FILE -> NEW -> COCOA TOUCH CLASS 然后从子类的下拉列表中选择 UICollectionViewController。
      • 现在,在 CollectionViewController 的身份检查器部分下,通过从自定义类的下拉列表中进行选择来添加您的类。
      • 现在打开您创建的类并像这样编辑您的方法:

        override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        //#warning Incomplete method implementation -- Return the number of sections
        return 1
         }
         override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        //#warning Incomplete method implementation -- Return the number of items in the section
        return 1
        }
        
      • 1234563 /p>

      [ios] [swift3] [xcode]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-06
        • 1970-01-01
        • 1970-01-01
        • 2013-10-06
        • 2017-12-27
        • 1970-01-01
        相关资源
        最近更新 更多