【问题标题】:collectionView is nil in UICollectionViewController loaded from Xib从 Xib 加载的 UICollectionViewController 中的 collectionView 为零
【发布时间】:2014-09-01 08:37:11
【问题描述】:

标题基本上说明了一切。我正在尝试使用在 Xib 文件中定义的 UICollectionViewController 创建一个集合视图。我的UICollectionViewController 使用自定义基类,当我尝试在其viewDidLoad() 中访问collectionView 时,collectionViewnil。代码非常简单。

UICollectionViewController 从 Xib 加载时,有人可以告诉我为什么 collectionView 是 nil,以及如何解决这个问题?当我以编程方式实例化 UICollectionViewController 时,一切正常,但我更愿意在 Xib 文件中创建 UICollectionViewController

更新:

【问题讨论】:

  • XIB的UICollectionView中添加Delegate & DataSource了吗??
  • 你需要像 UICollectionView 这样带有 XIB 单元的教程吗?
  • @iBhavin 见上面的截图。 collectionView 作为数据源和委托连接到我的自定义 UICollectionViewControl 类。这是自动设置的。但它不起作用。
  • when I try to access collectionView in its viewDidLoad(), collectionView is nil. 你的意思是你的collectionViewController类的viewDidLoad:方法里面的println(collectionView)返回nil

标签: ios objective-c iphone cocoa-touch swift


【解决方案1】:

检查您的 Xib 委托设置和代码,按照以下步骤操作:

注册单元格:

[_collectionView registerClass:[UICollectionViewCell 类] forCellWithReuseIdentifier:Cell_Identifier];

并直接查看API文档和demo: http://developer.apple.com/library/etc/redirect/xcode/ios/889e4b/samplecode/CollectionView-Simple/Introduction/Intro.html

新的截图和代码。

-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:                      (UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

    {
        UIEdgeInsets top = {10,25,15,25};
        return top;
    }

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
    CGSize size = {25,25};
    return size;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
{
    CGSize size = {25,25};
    return size;
}

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(70, 70);
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
    return 30;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 30;
}

【讨论】:

  • 我怀疑这与代表网点有关。但请看我现在附上的截图。在我的 IB(这是 Xcode 6 beta 6)的任何地方都没有列出文件所有者之类的东西。 collectionView 的数据源和委托自动设置为 GridViewCtrl(这是我自定义的 UICollectionViewControl 类)。我该怎么办?
  • 除上述外,还需要UICollectionViewFlowLayout,新增XIB和代码设置,请看截图和代码方法。
【解决方案2】:

试试here

使用 Xib 创建 collectionView 的示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2019-10-01
    • 2015-04-07
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多