我想显示一些特定于单元格的文本,但我无法从集合视图中提取可见单元格。
最有帮助的是这些:
如何从 UICollectionViewCell 访问 UICollectionView 中 Cell 的 indexPath
检测 iOS UICollectionCell 何时离开屏幕
较低的集合视图(self addSubview)包含可能的项目。一个上层(self addSubview)包含来自下层的选择。用户按下一个按钮(再次自我 addSubview),下部视图滚动到遗忘,上部视图展开,使得一个单元格填满屏幕。所有的阵列构建和显示工作正常。没有 *.nib。
不起作用的是弄清楚应用程序正在向用户呈现哪个单元格。
尝试#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]
当旋转结束时,单元 0 正确地占据了中心舞台。不幸的是,单元格 2 的描述也是如此。向左/向右滚动,单元格会相应更改,相应的文本不会。它保持不变:映射到单元格 2 的那个。
显然我将错误的索引传递给描述数组。
尝试#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。
我没有阅读文档的哪一部分?