关注此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。
答案 0 :(得分:1)
是的,每次收集视图滚动时,它都会添加imageView
!这不是好方法。现在,您可以做的是,在collectionview cell
中选择一个图像视图,我的意思是在界面构建器(xib或故事板,无论您使用过什么)和cellForItemAtIndexPath
只是show or hide
图像视图根据需要或根据要求更改图像!
更新:
如果您以编程方式创建了集合视图,那么您可以在cellForItemAtIndexPath
中设置一些标记!取一个标记并在添加imageview
后设置它。并且您可以将imageview
和flag
声明为全局变量。像,
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*/
}