web-dev-qa-db-ja.com

xibでUICollectionViewCellサブクラスを作成します

リンクされたxibでUICollectionViewCellサブクラスを作成しようとしています。これを実行します。新しい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で表示するにはどうすればよいですか?

編集:

私はこれをしました:

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

.xibファイルのセルがセルのタイプを知っていることを確認してください。

インターフェイスビルダーでセルを選択します

enter image description here

そして、アイデンティティインスペクターで

enter image description here

その後、ラベルをプロパティに関連付けます。 (あなたはすでにそれをしたと思う)

次に、cellForItemAtIndexPath:メソッドに.xibファイルが既にロードされているかどうかを確認することをお勧めします

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

このドキュメントで答えを見つけることができます ICollectionCellを追加するUICollectionView

StoryBoard内のUICollectionViewのみが内部にUICollectionViewCellを持っています。 XIBを使用する場合は、CellName.xibで新しいXIBを作成し、それにCollectionViewCellを追加し、UICollectionViewカスタムクラスの名前を指定します。その後、registerNib.Sampleコードを使用します。 https://github.com/lequysang/TestCollectionViewWithXIB

20
Autobots