Создайте подкласс UICollectionViewCell с помощью xib
Я пытаюсь создать подкласс 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
?
EDIT:
Я делаю это:
- (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;
}
Ответы
Ответ 1
Убедитесь, что ячейка в файле .xib знает, какой тип ячейки.
Выберите ячейку в построителе интерфейса
![enter image description here]()
а затем в инспекторе идентификации
![enter image description here]()
Впоследствии свяжите свои метки с вашими свойствами. (Я думаю, вы уже это сделали)
Затем я бы рекомендовал проверить, загружен ли файл .xib по вашему методу cellForItemAtIndexPath:
NSString *identifier = @"MyCell";
static BOOL nibMyCellloaded = NO;
if(!nibMyCellloaded)
{
UINib *nib = [UINib nibWithNibName:@"MyCell" bundle: nil];
[cv registerNib:nib forCellWithReuseIdentifier:identifier];
nibMyCellloaded = YES;
}
Ответ 2
Вы можете найти ответ в этом документе UICollectionView, добавляющий UICollectionCell.
Только UICollectionView внутри StoryBoard имеет UICollectionViewCell внутри. Если вы используете XIB, создайте новый XIB с CellName.xib, добавьте в него CollectionViewCell, укажите имя пользовательского класса UICollectionView. После этого используйте registerNib.Sample код: https://github.com/lequysang/TestCollectionViewWithXIB