2

在 UICollectionView 上工作时,我正在从 nib 加载一个单元格,如下所示

- (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];
}

我的笔尖文件如下所示

在此处输入图像描述

顶部标签用于显示单元格的数量,中间标签用于显示某个文本

在方法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 设置为, row5 和 row9 和 row10 的 titleLabel 也设置为: This is row 1在此处输入图像描述

在此处输入图像描述

如果有人知道我在中间做错了什么。请帮忙。

我的收藏本节包含 1 节和 15 行。

4

1 回答 1

3

细胞被重复使用。一旦您向下滚动并且单元格 1 变得不可见,集合视图就会使其再次可用。只需为所有单元格设置文本,例如

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