web-dev-qa-db-fra.com

Créer une sous-classe UICollectionViewCell avec xib

J'essaie de créer une sous-classe UICollectionViewCell avec un xib lié, je dois faire ceci: j'ai créé un nouveau fichier xib et j'ai ajouté un UICollectionViewCell dedans, puis j'ai créé ce fichier de sous-classe:

@interface MyCell : UICollectionViewCell

@property (weak, nonatomic) IBOutlet UILabel *label;
@end

J'ai également lié dans la classe personnalisée du propriétaire du fichier la classe MyCell dans le générateur d'interface, et j'ai ajouté un UILabel, puis dans mon UICollectionView viewDidLoad, je fais ceci:

[self.collectionView registerClass:[MyCell class] forCellWithReuseIdentifier:@"MyCell"];

UINib *cellNib = [UINib nibWithNibName:@"MyCell" bundle:nil];
[self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"MyCell"];

En plus de cela:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
MyCell *cell = (MyCell*)[cv dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];


cell.label.text = @"Cell Text";


return cell;
}

Cependant, cela ne fonctionne pas, je reçois cette erreur:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x907eca0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label.'

Qu'ai-je fait de mal? Comment puis-je connecter une sous-classe UICollectionViewCell à un xib et l'afficher dans une UICollectionView?

MODIFIER:

je dois faire ceci:

- (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;
}
46
Piero

Assurez-vous que la cellule du fichier .xib sait quel est le type de la cellule.

Sélectionnez la cellule sur votre générateur d'interface

enter image description here

puis l'inspecteur d'identité

enter image description here

Associez ensuite vos étiquettes à vos propriétés. (Je pense que tu l'as déjà fait)

Ensuite, je vous recommande de vérifier si vous avez déjà chargé le fichier .xib sur votre cellForItemAtIndexPath: méthode

NSString *identifier = @"MyCell";    

    static BOOL nibMyCellloaded = NO;

    if(!nibMyCellloaded)
    {
        UINib *nib = [UINib nibWithNibName:@"MyCell" bundle: nil];
        [cv registerNib:nib forCellWithReuseIdentifier:identifier];
        nibMyCellloaded = YES;
    }
48
perrohunter

Vous pouvez trouver la réponse dans ce document ICollectionView ajoutant UICollectionCell .

Seul UICollectionView à l'intérieur de StoryBoard a UICollectionViewCell à l'intérieur. Si vous utilisez XIB, créez un nouveau XIB avec CellName.xib, ajoutez-y CollectionViewCell, spécifiez le nom de la classe personnalisée UICollectionView. Après cela, utilisez le code registerNib.Sample: https://github.com/lequysang/TestCollectionViewWithXIB

20
Autobots