我有一个只显示三个单元格的collectionView。每个单元格都与我在storyboard中设置的自定义collectionViewCell类型相同。我只希望每个单元格只实例化一次;没有重复使用。
如何从cellForItemAtIndexPath:datasource方法返回未重用的单元格?有可能这样做吗?
答案 0 :(得分:2)
UICollectionViewCell
并不意味着您将摆脱之前不再出现在屏幕上的内容。UICollectionView
,UICollectionViewLayout
会自动生成不同数量的单元格。UIScrollView
构建, 重用 ,而不是为最终出现的每个单元格分配内存。 UICollectionViewDataSource
协议,您的集合视图会重新填充刚刚离开屏幕的单元格,并将其放在显示列表的下方或上方,以便重复使用"而不是造成记忆问题。集合视图非常高效,我建议使用内置的内存保存dequeuereusablecellwithidentifier
。
您可以通过在UICollectionViewCell
内的单元格内放置您需要的必要数据(可能需要NSArray
的子类)来获得您想要的结果。
您将使用cellForItemAtIndexPath
访问每个对象(在我们的示例中为1 - 100)并且作为滚动,重用单元格的基本原则将显示需要显示的NSArray对象。
我希望这是有道理的,它可以帮助您解决问题!
答案 1 :(得分:-1)
使用属性:
@property (nonatomic, strong) UICollectionViewCell *firstCell;
@property (nonatomic, strong) UICollectionViewCell *secondCell;
@property (nonatomic, strong) UICollectionViewCell *thirdCell;
在viewDidLoad中你可以创建它:
self.firstCell = [[UICollectionViewCell alloc] init];
// Do you need...
您的委托方法如下:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case 0:
return self.firstCell;
break;
case 1:
return self.secondCell;
break;
case 2:
return self.thirdCell;
break;
default:
return nil;
break;
}
}