【问题标题】:When do UICollectionView @required method's get called?UICollectionView @required 方法什么时候被调用?
【发布时间】:2013-08-16 17:56:27
【问题描述】:

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

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

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

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

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

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

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

和标题一样,@required 方法什么时候被调用?他们都以这种方式被调用吗?

非常感谢您的帮助!

【问题讨论】:

    标签: ios objective-c uicollectionview


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢你,杰夫!当 CollectionView 首次出现在视图中时,是否所有方法都作为 UICollectionViewDataSource 协议的一部分运行?喜欢方法的 numberOfSectionInCollectionView 和 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section?
    • 通常情况下,是的。您可以将一些日志功能放入其中以自己进行测试。该顺序绝对是您所期望的,即 numberOfSections 后跟 numberOfItemsInSection 后跟 cellForIndexPath 等。我说“通常”是因为单元格的呈现经过高度优化,仅在必要时发生,并且如果您的视图层次结构中有任何异常或转换,它可能不会立即要求单元格,因为它们无论如何都不可见。
    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2015-07-13
    • 2012-11-30
    • 2011-07-26
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多