8

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

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

如何确定单元格何时出现在屏幕上?

4

2 回答 2

6

做一个子类UICollectionViewCell。覆盖其didMoveToWindow方法:

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

从技术上讲,单元格可能仍然不可见,要么是因为它超出了窗口的可见边界,要么是因为它被另一个视图覆盖。但通常情况下两者都不是。

另请注意,如果一个单元格被重用,它可能不会从视图层次结构中删除或重新添加到视图层次结构中。集合视图只能更改单元格的框架。(我知道iOS 6.0 的表格视图单元格会这样做。)在这种情况下,当单元格被重新用于另一个项目时UITableView,您不会收到消息。didMoveToWindow

如果您解释为什么您想知道何时显示单元格,我们可能会给您一个更好的答案。

于 2013-06-25T18:45:58.563 回答
1

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

于 2013-06-25T18:27:51.790 回答