Mur*_*gal 23 objective-c uicollectionview
我是新手UICollectionView
,我正在按照我在网上找到的教程,但我遇到了一个我无法弄清楚的错误.这是一个背景.
在调试器中,我可以看到以下情况:
numberOfSectionsInCollectionView
:被叫,我返回1collectionView:numberOfItemsInSection:
被调用,我返回模型的大小(20)collectionView:layout:sizeForItemAtIndexPath:
为模型中的每个项目调用一次collectionView:layout:insetForSectionAtIndex:
叫做collectionView:cellForItemAtIndexPath:
被叫,它在这条线上崩溃了......
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
Run Code Online (Sandbox Code Playgroud)有这个错误......
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'
Run Code Online (Sandbox Code Playgroud)
当我在该行暂停执行并检查控制台时,似乎有一个布局......
(lldb) po collectionView.collectionViewLayout
(UICollectionViewLayout *) $4 = 0x07180fd0 <UICollectionViewFlowLayout: 0x7180fd0>
Run Code Online (Sandbox Code Playgroud)
它UICollectionView
是故事板中唯一一个场景的一部分.在viewController.m中,没有任何其他方法可以UICollectionView
创建.
有没有人有任何想法?
Maz*_*ini 31
这对我有用:
UICollectionViewFlowLayout *aFlowLayout = [[UICollectionViewFlowLayout alloc] init];
[aFlowLayout setItemSize:CGSizeMake(200, 140)];
[aFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
myCollectionViewController = [[MyCollectionViewController alloc]initWithCollectionViewLayout:flowLayout];
Run Code Online (Sandbox Code Playgroud)
如果以编程方式创建UICollectionView,则需要布局.
Mur*_*gal 18
事实证明问题在于registerClass:
.我有这个:
[self.collectionView registerClass:[UICollectionView class]
forCellWithReuseIdentifier:@"MyCell"];
Run Code Online (Sandbox Code Playgroud)
但应该是这样的:
[self.collectionView registerClass:[UICollectionViewCell class]
forCellWithReuseIdentifier:@"MyCell"];
Run Code Online (Sandbox Code Playgroud)
因此,出列方法是创建一个UICollectionView
而不是一个UICollectionViewCell
.
如果您在UICollectionViewController中以编程方式创建集合视图控制器,请确保UICollectionViewController init方法使用[super initWithCollectionViewLayout]而不是[super init],例如:
-(id) initWithImages:(NSArray *)pImages {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
[layout setMinimumInteritemSpacing:0.0f];
[layout setMinimumLineSpacing:0.0f];
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
if (self = [super initWithCollectionViewLayout:layout]) {
_images= [[NSArray alloc] initWithArray:pImages];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
From:UICollectionViewController类参考:概述
归档时间: |
|
查看次数: |
34968 次 |
最近记录: |