我想显示一些特定于单元格的文本,但我无法从集合视图中解放出可见单元格。
最有帮助的是:
how to access from UICollectionViewCell the indexPath of the Cell in UICollectionView
detecting when an iOS UICollectionCell is going off screen
较低的集合视图(self addSubview)包含可能的项目。较高的一个(self addSubview)包含较低的选项。用户按下按钮(再次自我addSubview),下部视图滚动到遗忘,上部视图展开,以便一个单元格填满屏幕。所有的阵列构建和显示都很好。没有* .nibs。
什么不起作用是弄清楚应用向用户呈现哪个单元格。
尝试#1:首先,我尝试将UILabel与普通操作并行填充。按下按钮和cellForItemAtIndexPath:
if (cv.tag == UPPER_CV_TAG) {
UICollectionViewLayoutAttributes *itemAttributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
NSIndexPath *tempIndexPath;
tempIndexPath = itemAttributes.indexPath;
NSLog(@"cellForItem indexPath %@",indexPath);
NSLog(@"layout indexPath %@",tempIndexPath);
}
按照您的预期做出回应:
cellForItem indexPath <blah blah> 2 indexes [0, 0]
layout indexPath < > 2 indexes [0, 0]
cellForItem indexPath < > 2 indexes [0, 1]
layout indexPath < > 2 indexes [0, 1]
cellForItem indexPath < > 2 indexes [0, 2]
layout indexPath < > 2 indexes [0, 2]
当回转结束时,Cell 0正确占据中心舞台。不幸的是,单元格2的描述也是如此。向左/向右滚动,单元格相应地改变,相应的文本没有。它保持不变:映射到单元格2的那个。
显然我将错误的索引传递给description数组。
尝试#2:好的,好的。我将询问一个我知道当前可见细胞占据的点并从中推断出原因。
CGPoint p = CGPointMake(512, 456);
NSIndexPath *theCellsIndexPath = [self.upper_collectionView indexPathForItemAtPoint:p];
NSLog(@"theCellsIndexPath=%d",theCellsIndexPath.item);
没有雪茄:
cellForItem indexPath < > 2 indexes [0, 0]
theCellsIndexPath=0
cellForItem indexPath < > 2 indexes [0, 1]
theCellsIndexPath=0
cellForItem indexPath < > 2 indexes [0, 2]
theCellsIndexPath=0
当我将512,456更改为其他可能的点时,从“0”没有变化。当我使用layoutAttributes来确定单元格在视图中的位置时,从“0”没有变化,以防万一。不,那个细胞是一个非常非常大的目标。我不会错过它。
尝试#3:也许我工作太辛苦了。我会陷入内心的事情
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
}
然后滚动。
不。永远不会被召唤。
尝试#4:由于我不知道屏幕上单个单元格的indexPath(但是collectionView确实如此),我想我可以使用didEndDisplayingCell遍历所有单元格,直到我点击“Bingo!”这是粗略的和指示性的程序员错误。
我很高兴collectionView逻辑缓冲三个单元格。可能会改善用户体验或其他方面。但它最终结束 - 在0 - 不是我的数组索引最后知道它的位置 - 在2.
我没有读过哪些文档?
答案 0 :(得分:12)
我没有读过哪些文档?
UICollectionView
有一个名为indexPathsForVisibleItems
的方法。请务必仔细阅读以了解您可以在API中使用的其他内容。
答案 1 :(得分:0)
尝试collectionView.visibleCells
NSArray *ary = collectionView.visibleCells;
for (UICollectionViewCell *cell in ary) {
NSIndexPath *path = [collectionView indexPathForCell:cell];
NSLog(@"indexPath of cell: Section: %d , Row: %d", (int)path.section, (int)path.row);
}