【问题标题】:Fill UICollectionViewCells in UICollectionView with data from an array programmatically以编程方式用数组中的数据填充 UICollectionView 中的 UICollectionViewCells
【发布时间】:2015-07-12 22:16:53
【问题描述】:

我有一个 UICollectionView,我想用 100 个 UICollectionViewCells 填充它,每个 UICollectionViewCells 都有自己独特的 UILabel 和从数组中获取的文本。我想以编程方式执行此操作(没有情节提要)。

我已尝试如下所示,但由于某种原因,只有第一个单元格正确呈现。

// Setting up the UICollectionView
- (void)setupCollectionView {
    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    CGRect newFrame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height * 0.5);
    self.collectionView=[[UICollectionView alloc] initWithFrame:newFrame collectionViewLayout:layout];
    [self.collectionView setDataSource:self];
    [self.collectionView setDelegate:self];

    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    [self.collectionView setBackgroundColor:[UIColor clearColor]];
    [self.view addSubview:self.collectionView];
}

//Trying to generate the unique cells with data
- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor yellowColor];

    UILabel *label = [[UILabel alloc] initWithFrame: cell.frame];
    label.text = [self.array objectAtIndex: indexPath.row];
    label.textColor = [UIColor blackColor];
    [cell.contentView addSubview:label];

    return cell;
}

注意:我的数组大小为 100,随机生成数字。

感谢您的帮助 :)

谢谢!

【问题讨论】:

    标签: ios objective-c iphone uicollectionview uicollectionviewcell


    【解决方案1】:

    数组的框架应该与它的单元格的边界相关,而不是它的单元格的框架,谁的原点会随着 indexPath 的增长而增长。此外,我们不想无条件地创建标签,因为单元格会被重用。仅当标签不存在时才创建标签....

    UILabel *label = (UILabel *)[cell viewWithTag:99];
    if (!label) {
        label = [[UILabel alloc] initWithFrame: cell.bounds];  // note use bounds here - which we want to be zero based since we're in the coordinate system of the cell
        label.tag = 99;
        label.text = [self.array objectAtIndex: indexPath.row];
        label.textColor = [UIColor blackColor];
        [cell.contentView addSubview:label];
    }
    // unconditionally setup its text
    NSNumber *number = self.myArrayOfRandomNumbers[indexPath.row];
    label.text = [number description];
    

    【讨论】:

    • 感谢丹的帮助。在你出现之前,我一直在努力解决这个问题!对问题的可靠诊断和对解决方案的很好解释。 10/10 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多