46 votes

Créer UICollectionViewCell sous-classe avec xib

Je suis en train de créer un UICollectionViewCell sous-classe associé à un xib, j'ai cela: J'ai créer un nouveau fichier xib et j'ai ajouter un UICollectionViewCell , alors j'ai créer cette sous-classe fichier:

@interface MyCell : UICollectionViewCell

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

Aussi j'ai lié dans le propriétaire du fichier de classe personnalisée à l' MyCell de la classe dans interface builder, 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"];

Ainsi que dans le présent:

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


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


return cell;
}

Toutefois, 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 un UICollectionViewCell sous-classe à une xib, et l'afficher dans un UICollectionView?

EDIT:

j'ai fais 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;
}

48voto

perrohunter Points 1445

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

Sélectionnez la cellule dans votre interface builder

enter image description here

et puis sur l'identité de l'inspecteur

enter image description here

Par la suite associer vos étiquettes avec vos propriétés. (Je crois que c'est déjà fait)

Alors je vous recommande de vérifier si vous avez déjà chargé .xib fichier 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;
    }

20voto

Autobots Points 786

Vous trouverez la réponse dans ce document UICollectionView ajoutant UICollectionCell.

Seulement UICollectionView à l'intérieur de StoryBoard ont UICollectionViewCell à l'intérieur. Si l'utilisation XIB, créer un nouveau XIB avec CellName.xib, ajouter CollectionViewCell à elle, précisez le nom de l'UICollectionView classe personnalisée. Après que l'utilisation registerNib.Exemple de code: https://github.com/lequysang/TestCollectionViewWithXIB

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X