1

我正在研究 UICollectionView 并且对如何/何时使用该方法有疑问:

- (UICollectionViewCell *)collectionView:(UICollectionView *)asker 
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath;

被调用。它具有的参数是 UICollectionView,这显然是您的 Controller 视图中的 CollectionView。我认为索引路径只是已分配到 CollectionView 中的特定单元格的索引。所以,我的问题是:

这个方法什么时候被调用?当我在 UICollectionView 内滚动并且需要填充项目时,它会被调用吗?或者当视图被实例化时,它会调用它来填充它的 CollectionView。

如果我在同一个视图中有两个 UICollectionView 会发生什么?我会使用这种方法并调用:

- (UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)cell
                                                    forIndexPath:(NSIndexPath *)indexPath;

在方法中两次并声明两个不同的重用标识符并按照我的意愿使用它们?

也像标题所说的那样,@required 方法什么时候被调用?他们都以这种方式被调用吗?

非常感谢你的帮助!

4

1 回答 1

2

asker参数是集合视图,它是delegate您在其中实现该方法的类。默认情况下,如果您在 Xcode 中使用关联的 xib 创建了 UICollectionViewController,则它是您视图中的 UICollectionView 并且委托已经设置,如您所说。

collectionView:cellForItemAtIndexPath:只要集合视图需要指定索引路径的单元格,就会调用该方法。实际的实现是私有的,但我们可以推断它会在它认为单元格即将变得可见时被调用(例如,因为用户正在滚动)。当然,当集合视图第一次出现时,所有可见的单元格都会被加载。

如果您有 2 个具有相同委托的集合视图,那么您需要将asker参数与您的属性/变量进行比较,以确定哪个集合视图正在请求单元格并适当地设置您的重用标识符。

于 2013-08-16T18:05:52.597 回答