2013-04-09 77 views
1

我试图做一个简单的任务,以编程方式向主视图添加UICollectionView。以编程方式将UICollectionViewController的视图添加到超级视图

我首先创建一个“PhotosViewController.h/H/XIB”文件(类型的UIViewController),删除了给定的视图,并添加了UICollectionView作为此控制器&的主视图再变的“超PhotosViewController.h“添加到UICollectionViewController。

我也跟着在本教程中给出的第6个步骤:http://skeuo.com/uicollectionview-custom-layout-tutorial然后跃升到第14步。我所要做的仅仅是当用户点击一个分段控制按钮调出这一观点。

if ([segmentedControl selectedSegmentIndex]==3){ 
    //Photos View Controller 
    pvc=[[PhotosViewController alloc] init]; 
    NSLog(@"Photos segment is chosen!"); 
    [[self view] addSubview:pvc.view]; **//Line 5** 
} 

但程序抛出了在达到5号线异常。

这是我得到的日志消息。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter' 

看起来像,我在这里错过了一些非常基本的东西。过去一个小时,我一直在寻找解决这个问题的方法,但我找不到任何东西。

任何帮助,非常感谢。

+0

这是否解决您的问题? http://stackoverflow.com/q/15270058/352891 – user352891 2013-04-09 23:47:06

+0

请添加collectionView代码,flowLayout,数据源和委托代码。 – Alex 2013-04-09 23:47:29

+0

@ user352891不,它没有 – user1646683 2013-04-10 00:29:31

回答

1
[[PhotosViewController alloc] init]; 

我想这是要在其中创建您的收藏视图控制器。此类的指定初始化程序是initWithCollectionViewLayout:,您将在其中传入布局对象。你没有通过,所以它抱怨。尝试使用该初始化程序,或者,在您的子类中,确保您调用此代替[super init],并传入新的流布局对象。

+0

非常感谢!那是我的错误。再次感谢你! :) – user1646683 2013-04-10 07:04:18

0

我不是你在哪里初始化您的收藏观点明确,但它应该是这个样子:

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical]; 

collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0f, 
                    230.0f, 
                    [self viewWidth], 
                    [self viewHeight]) 
            collectionViewLayout:flowLayout]; 

除非你有更多的扩展UICollectionViewFlowLayout。

从你得到的消息,它看起来好像你不给它一个UICollectionViewFlowLayout在collectionViewLayout:

+0

我有这个代码作为我的viewDidLoad方法的一部分。这是它的样子, ' - (void)viewDidLoad { [super viewDidLoad]; //在从其笔尖加载视图后执行其他任何设置。 UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc] init]; [flowLayout setItemSize:CGSizeMake(200,200)]; [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizo​​ntal]; [self.collectionView setCollectionViewLayout:flowLayout]; [[self collectionView] setBackgroundColor:[UIColor colorWithWhite:0.25f alpha:1.0f]]; }' 任何其他提示? – user1646683 2013-04-10 04:45:10

相关问题