我需要调用UICollectionView的dequeueCell:从数据源的cellForPath:?

我真的很想提供'静态'单元格到我的UICollectionView,以前用UITableView。 但是我知道,我们的好男孩和女孩必须使用dequeueReusableCellWithReuseIdentifier:forIndexPath:作为我们细胞的工厂。 所以我提出下面的scheme,并要求对其潜力进行反馈。 到目前为止,它正在为我工​​作,但我害怕一个未知的疑难杂症。

 #import "MyCellClass.h" @implementation MyViewController { MyCellClass *_cell0; // etc - many are possible. could store in array } -(void)viewDidLoad { // assume MyCellClass has a +nib and +reuseId. The reader understands. [_collectionView registerNib:[MyCellClass nib] forCellWithReuseIdentifier:[MyCellClass reuseId]]; } -(void)viewDidAppear:animated { // this is where the fun begins. assume proper counts coming from the datasource NSIndexPath *indexPath = [NSIndexPath indexPathWithRow:0 inSection:0]; _cell0 = [[self collectionView] dequeueReusableCellWithReuseIdentifier:[MyCellClass reuseId] forIndexPath:indexPath]; // etc } -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { if ([indexPath row] == 0) return _cell0; // etc } 

我故意掩饰细节,如configuration单元格。 疯狂? 天才? 只是现状? 它似乎工作到目前为止,但我担心,不知何故,苹果希望从cellForPath内部cellForPath 。 有什么想法吗?

调用dequeueReusableCellWithReuseIdentifier:forIndexPath:的唯一原因是重用单元格。 但是一个“静态”集合视图? 我们在谈论多less个细胞? 如果我有一个足够小的集合视图,它从来没有滚动,我会考虑不打扰重用单元格。 肯定会解决问题。 毕竟,故事板中的静态表格不会重复使用单元格; 这是什么使其静态。 所以,我会说,删除有关dequeueReusableCellWithReuseIdentifier:forIndexPath的东西,只提供单元格时问。

dequeue没有什么神奇的; 这只是找出重用堆中是否有任何单元格的方法,如果是这样的话就只有一个单元格。 毕竟,考虑iOS 4的表视图是如何工作的,你说的是dequeue ,但是如果没有可重用的单元格返回,那么表返回nil ,你必须alloc-init你自己的单元格或者将其从一个笔尖, 你自己 。 那么,你正在为收集视图中的所有项目提出这样的build议。 往前走。

苹果TSI的回应Guy:

虽然你说你的应用程序工作,你真的应该使用数据源方法“cellForItemAtIndexPath”内的“dequeueReusableCellWithReuseIdentifier”。 这是支持的使用模式。 不要试图抓住你的MyCellClass,让集合视图pipe理,它会问你如果需要出队。

我要p嘴,更改我的代码,然后发出增强请求。 但我告诉你,它工作得很好!

查看我的MBStaticCollectionView ,它使您能够从Interface Builder定义静态UICollectionView单元,而无需定义数据源。