2

UICollectionViewで作業しているとき、私は以下のようにペン先からセルをロードしています

- (void)viewDidLoad
{
    [super viewDidLoad];
    /* Uncomment this block to use nib-based cells */
    UINib *cellNib = [UINib nibWithNibName:@"NibCell" bundle:nil];
    [self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"cvCell"];


    // Configure layout
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    self.collectionView.contentInset    =   UIEdgeInsetsMake(10.0f, 0.0f, 10.0f, 0.0f);

    [flowLayout setItemSize:CGSizeMake(300, 200)];
    [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
    [self.collectionView setCollectionViewLayout:flowLayout];
}

そして私のnibファイルは以下のようになります

ここに画像の説明を入力してください

上のラベルはセルの数を表示するために使用され、中央のラベルは特定のテキストを表示するために使用されます

メソッドcellForItemAtIndexPathで、テキストを特定の行のセルに設定したいだけです(この例では、1行目でテキストを設定しています):

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

     // Setup cell identifier
     static NSString *cellIdentifier = @"cvCell";

     UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
     UILabel *titleLabel    = (UILabel *)[cell viewWithTag:100];
     UILabel *cellLablel    = (UILabel *)[cell viewWithTag:200];
     cellLablel.text         =   self.dataArray[0][indexPath.row];
     if ( indexPath.row == 1)
         [titleLabel setText:@"this is row 1"];

    return cell;

}

アプリを実行すると、問題が発生します。row1のセルのtitleLabelが に設定されるだけでThis is row 1なく、row5、row9、row10のtitleLabelも設定されます。 ここに画像の説明を入力してください

ここに画像の説明を入力してください

誰かが私が途中で間違っていることを知っているなら。助けてください。

私のコレクションには、このセクションの1つのセクションと15の行が含まれています。

4

1 に答える 1

3

セルは再利用されます。下にスクロールしてセル1が非表示になるとすぐに、コレクションビューで再び使用できるようになります。すべてのセルにテキストを設定するだけです。例:

titleLabel.text = [NSString stringWithFormat:@"this is row %d", indexPath.row];
于 2012-11-23T18:53:05.117 に答える