如何确定何时显示UICollectionViewCell?

Mik*_*ike 7 uikit ios uicollectionview

我想知道在UICollectionViewCell实际屏幕上显示a的时间. cellForRowAtIndexPath是不够的,因为此时实际上没有看到细胞. didEndDisplayingCell是不够的,因为当从视图中移除单元格时会调用它.

UITableViewDelegate有一种willDisplayCell方法,我发现过去对类似的东西很有用,但似乎并不存在UICollectionViewDelegate.

如何确定电池何时被带到屏幕上?

rob*_*off 5

成为的子类UICollectionViewCell。覆盖其didMoveToWindow方法:

- (void)didMoveToWindow {
    if (self.window != nil) {
        // I am now in the window's view hierarchy and thus “on screen”.
    }
}
Run Code Online (Sandbox Code Playgroud)

从技术上讲,该单元可能仍然不可见,或者是因为它在窗口的可见范围之外,或者是因为它已被另一个视图覆盖。但是通常情况都不是这样。

还要注意,如果单元被重用,则它可能不会从视图层次结构中删除或重新添加到视图层次结构中。收集视图只能更改单元格的框架。(我知道UITableView从iOS 6.0开始使用表格视图单元格就可以做到这一点。)在那种情况下,didMoveToWindow当该单元格用于其他项目时,您不会收到任何消息。

如果您解释了为什么要知道何时显示单元格,我们也许可以为您提供更好的答案。


Yam*_*man 1

-[UICollectionView visibleCells]返回屏幕上可见的所有单元格的 NSArray

  • 这可能会报告不在屏幕上的单元格。 (2认同)