Создайте подкласс UICollectionViewCell с помощью xib [duplicate]
На этот вопрос уже есть ответ здесь:
Что это значит? «NSUnknownKeyException», причина:… этот класс не совместим со значением ключа для кода X » 66 ответовЯ пытаюсь создатьUICollectionViewCell
Подкласс со связанной XIB, я должен сделать это: у меня есть создать новый файл 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;
}