如何将元素向量映射到UICollectionView网格?

时间:2014-05-19 09:44:18

标签: ios objective-c uicollectionview

我有一个想要映射到UICollectionView的一维图像矢量(类似于3000)。我在实现委托方法cellForItemAtIndexPath时遇到了问题 - 即,我该如何处理NSIndex?我已经查看了网络上的所有文档和教程,并且每个人都对这个细节有所了解:我如何从这个异物NSIndex(我甚至不知道它来自何处)映射到一个整数我的数组的索引?

至于网格应该如何看,以下之一:

(A)预设数量为X行的图像,可以通过滑动水平滚动查看集合。订购应如此:

 1  X+1  2X+1  ...scroll
 2  X+2  3X+2  ...scroll
 .
 .
 X  X+X  2X+X  ...scroll

(B)预设了Y列图像,可以通过滑动垂直滚动查看集合:

 1   2   3  ...  Y
Y+1 Y+2 Y+3 ... Y+Y
 .
 .
scroll up and down
 .
 .

我是否需要自定义类型的dequeueReusableCell?我自己的FlowLayout子类?我很困惑,因为这个NSIndex是如此令人费解。看起来它应该是一堆连接的整数,但我的数据源是一维数组,我不知道如何从NSIndex中提取索引,因为教程都使用了assetsArray或2D数组,以及NSIndex的文档只显示了一堆数组,而不是如何将它与单个数组一起使用。

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,来自UICollectionViewDatasouce协议的NSIndexPath只是一个Section和Row对,而不是一个网格。您是否实现了数据源方法 collection:numberOfItemsInSecion numberOfSectionsInCollection 。你必须先做这些。处理 cellsForItemAtIndexPath

因此,例如在您的情况下,* numberOfItemsInCollection将返回1.这意味着只有1个数据部分。然后* collection:numberOfItemsInSection将返回你的1d数组的计数。 indexPath对象具有section和row属性。因此,如果您的 numberOfItemsInCollection 返回4(意味着有4个数据部分),那么集合:NumberOfItemsInSection 将至少被调用4次4次。每次,indexPath.section都会告诉你collectionView需要计算的数据部分。

集合:cellForItemAtIndexPath:数据源委托中,至少会调用1d数组中的每个项目。 indexPath.section将告诉您哪个数据部分和indexPath.row将告诉您想要的项目。在你的情况下,因为你应该只有1个部分,indexPath.row将是你的1d数组的索引。 (myarray.objectAt(indexPath.row或myarray [indexPath.row])

此数据源协议与UITableViewDatasource完全相同。

再一次,UICollectionView与项目网格的布局无关。 Layout对象为您完成。如果你想要一个项目网格,那么使用FlowLayout。