IOS UICollectionView 为 UICollectionViewCell 注册 nib 不起作用
Posted
技术标签:
【中文标题】IOS UICollectionView 为 UICollectionViewCell 注册 nib 不起作用【英文标题】:IOS UICollectionView Register nib for UICollectionViewCell not working 【发布时间】:2015-05-26 09:51:24 【问题描述】:这是我的代码:
- (void)viewDidLoad
[super viewDidLoad];
...
UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
[layout setItemSize:CGSizeMake(160, 160)];
[layout setMinimumInteritemSpacing:5.f];
[layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
_photoPicker = [[UICollectionView alloc] initWithFrame:CGRectMake(10, 10 , self.view.frame.size.width - 20, 160 ) collectionViewLayout:layout];
[_photoPicker registerNib:[UINib nibWithNibName:@"photoUploadCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@" photoUploadCell"];
//[_photoPicker registerClass:[photoUploadCollectionViewCell class] forCellWithReuseIdentifier:@"photoUploadCell"];
_photoPicker.backgroundColor = gray;
_photoPicker.delegate = self;
_photoPicker.dataSource = self;
[self.scrollView addSubview:_photoPicker];
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
photoUploadCollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"photoUploadCell" forIndexPath:indexPath];
此代码在photoUploadCollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"photoCell" forIndexPath:indexPath];
崩溃,我收到此错误:
2015-05-26 10:45:29.363 免费销售[4505:55482] * 中的断言失败 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:], /SourceCache/UIKit_Sim/UIKit-3347.44/UICollectionView.m:3454 2015-05-26 10:45:29.374 免费销售 [4505:55482] * 终止应用程序到期 未捕获的异常“NSInternalInconsistencyException”,原因: '不能出列一种视图:UICollectionElementKindCell with 标识符 photoCell - 必须为 标识符或连接故事板中的原型单元' *** 首先抛出调用栈:
有人知道这个有线问题吗?
【问题讨论】:
检查reuse-identifier和nib名字是否拼写正确? 我已经检查过很多次了。 而且 _photoPicker 绝对不是零,对吧?photoCell
未注册..这是您拥有的实际代码吗?因为你有一个空格forCellWithReuseIdentifier:
..
@0yeoj 你刚刚拯救了我的一天,我被困在这里大约 2 小时,非常感谢在回答中发表您的评论
【参考方案1】:
photoCell
未注册..这是您拥有的实际代码吗?因为你有一个空格forCellWithReuseIdentifier:
删除空格..
编码愉快,干杯!
【讨论】:
【参考方案2】:注意代码:
[_photoPicker registerNib:[UINib nibWithNibName:@"photoUploadCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@" photoUploadCell"];
删除@" photoUploadCell"
中的空格
希望这能解决您的问题
【讨论】:
【参考方案3】:您使用的名称photoUploadCell
与您稍后在photoCell
使用的名称不同。
【讨论】:
对不起,我没有注意我忘了更改变量名,(我正在做一些测试)无论如何这都不能解决我的问题【参考方案4】:1 : 首先用这个修改你的代码
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
photoUploadCollectionViewCell *cell= (photoUploadCollectionViewCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"photoUploadCell" forIndexPath:indexPath];
2:在这段代码中
[_photoPicker registerNib:[UINib nibWithNibName:@"photoUploadCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:**@" photoUploadCell"]**;
在@" photoUploadCell"
中有带有标识符的空格确保空格被删除并与笔尖和单元格匹配并使用相同的标识符注册。
干杯
【讨论】:
以上是关于IOS UICollectionView 为 UICollectionViewCell 注册 nib 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使 UICollectionView 始终以项目为中心停止滚动