Подтвердить что ты не робот

Создайте подкласс 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;
}
4b9b3361

Ответ 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