webentwicklung-frage-antwort-db.com.de

Erstellen Sie eine UICollectionViewCell-Unterklasse mit xib

Ich versuche, eine UICollectionViewCell - Unterklasse mit verknüpftem xib zu erstellen. Ich habe Folgendes ausgeführt: Ich habe eine neue xib-Datei erstellt und ein UICollectionViewCell hinzugefügt. Dann habe ich diese erstellt Unterklassendatei:

@interface MyCell : UICollectionViewCell

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

Außerdem habe ich in der benutzerdefinierten Klasse des Dateieigentümers die Klasse MyCell im Interface Builder verknüpft und eine UILabel hinzugefügt. Dann führe ich in meiner UICollectionView viewDidLoad Folgendes aus:

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

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

Sowie in diesem:

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


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


return cell;
}

Dies funktioniert jedoch nicht. Ich erhalte folgende Fehlermeldung:

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

Was habe ich falsch gemacht? Wie kann ich eine Unterklasse UICollectionViewCell mit einer xib verbinden und in einer UICollectionView anzeigen?

BEARBEITEN:

ich habe das getan:

- (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

Stellen Sie sicher, dass die Zelle in der .xib-Datei den Typ der Zelle kennt.

Wählen Sie die Zelle in Ihrem Interface Builder aus

enter image description here

und dann auf dem Identitätsinspektor

enter image description here

Verknüpfen Sie anschließend Ihre Etiketten mit Ihren Eigenschaften. (Ich denke du hast das schon getan)

Dann würde ich empfehlen, zu überprüfen, ob Sie die .xib-Datei bereits mit Ihrer cellForItemAtIndexPath: - Methode geladen haben

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

Die Antwort finden Sie in diesem Dokument ICollectionView fügt UICollectionCell hinz .

Nur UICollectionView in StoryBoard enthält UICollectionViewCell. Wenn Sie XIB verwenden, erstellen Sie eine neue XIB mit CellName.xib, fügen Sie ihr CollectionViewCell hinzu, und geben Sie den Namen der benutzerdefinierten Klasse UICollectionView an. Verwenden Sie danach den registerNib.Sample-Code: https://github.com/lequysang/TestCollectionViewWithXIB

20
Autobots