【发布时间】:2013-01-06 04:18:19
【问题描述】:
我正在尝试创建一个带有链接 xib 的 UICollectionViewCell 子类,我已经这样做了:
我创建了一个新的 xib 文件并在其中添加了一个 UICollectionViewCell,然后我创建了这个子类文件:
@interface MyCell : UICollectionViewCell
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
我还在文件所有者自定义类中链接了界面生成器中的MyCell 类,并且我添加了一个UILabel,然后在我的UICollectionView viewDidLoad 中我这样做:
[self.collectionView registerClass:[MyCell class] forCellWithReuseIdentifier:@"MyCell"];
UINib *cellNib = [UINib nibWithNibName:@"MyCell" bundle:nil];
[self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"MyCell"];
还有这个:
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
MyCell *cell = (MyCell*)[cv dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
cell.label.text = @"Cell Text";
return cell;
}
但是这不起作用,我收到此错误:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x907eca0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label.'
我做错了什么?如何将 UICollectionViewCell 子类连接到 xib,并将其显示在 UICollectionView 中?
编辑:
我已经这样做了:
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSString *identifier = @"MyCell";
static BOOL nibMyCellloaded = NO;
if(!nibMyCellloaded)
{
UINib *nib = [UINib nibWithNibName:@"MyCell" bundle: nil];
[cv registerNib:nib forCellWithReuseIdentifier:identifier];
nibMyCellloaded = YES;
}
MyCell *cell = (MyCell*)[cv dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
cell.labelCell.text = @"Text";
return cell;
}
【问题讨论】:
-
所以在使用带有连接类的 xib 的情况下,您似乎必须在 nib 文件和与 xib 链接的类上调用 collectionView 注册?您的工作流程是否调用了单元类的 initWithFrame 初始化程序?
-
您的“编辑代码”有问题。成员函数内的静态变量由所有实例共享。如果你有多个视图控制器实例,只有第一个会调用
registerNib。
标签: ios iphone uicollectionview xib uicollectionviewcell