我正在尝试以编程方式执行向主视图添加UICollectionView的简单任务。
我首先创建了一个“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 :(得分:1)
[[PhotosViewController alloc] init];
我认为这是您创建集合视图控制器的地方。此类的指定初始化程序为initWithCollectionViewLayout:
,您可以在其中传递布局对象。你没有传入,所以它抱怨。尝试使用该初始化器,或者在子类中确保调用此而不是[super init],并传入新的流布局对象。
答案 1 :(得分: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。
从你收到的消息中,看起来好像你没有在你的collectionViewLayout中给它一个UICollectionViewFlowLayout: