以编程方式将子视图添加到UICollectionView

时间:2017-06-15 04:35:58

标签: ios objective-c uicollectionview

关注此answer,我可以通过编程方式创建UICollectionView。但是当我尝试将子视图添加到UICollectionViewCell时,我找不到更好的解决方案。以下是关于SO实现的最多答案

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor redColor];
    UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];
    image.image = /*some image*/
    [cell addSubview:image];
    return cell;
}

也许我错了,但使用UICollectionView的目的不是因为回收和重用以优化性能?如果在用户滚动时使用上面的代码,当UIImageView获取触发器时,它会在UICollectionViewCell子视图中添加越来越多的dequeueReusableCellWithReuseIdentifier

那么更好的方法是什么?我无法使用UITableView因为我需要水平滚动技术。

注意:我需要以编程方式创建它而不使用xib。

1 个答案:

答案 0 :(得分:1)

是的,每次收集视图滚动时,它都会添加imageView!这不是好方法。现在,您可以做的是,在collectionview cell中选择一个图像视图,我的意思是在界面构建器(xib或故事板,无论您使用过什么)和cellForItemAtIndexPath只是show or hide图像视图根据需要或根据要求更改图像!

更新:

如果您以编程方式创建了集合视图,那么您可以在cellForItemAtIndexPath中设置一些标记!取一个标记并在添加imageview后设置它。并且您可以将imageviewflag声明为全局变量。像,

   if (!isImageAdded) {

    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor redColor];
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];
    imageView.image = /*some image*/
    [cell addSubview:image];
    isImageAdded = YES;
}
else{

    imageView.image = /*some image*/
}