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;
}
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
puis l'inspecteur d'identité
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;
}
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