当 UICollectionView 最初加载其数据时,我们如何获得可见的 Cell IndexPath
Posted
技术标签:
【中文标题】当 UICollectionView 最初加载其数据时,我们如何获得可见的 Cell IndexPath【英文标题】:How we can get visible Cell IndexPath when a UICollectionView Loads its data initially 【发布时间】:2014-09-11 13:06:47 【问题描述】:当 UICollectionView 最初加载其数据时,有什么方法可以获取 indexPathsForVisibleItems 。基本上我想要当前在屏幕上可见的所有单元格 indexPaths。我使用下面的代码在 scrollViewDidScroll 中得到它。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
[self LoadVisibleItems];
-(void)LoadVisibleItems
NSArray* visibleCellIndex = self.myCollectionView.indexPathsForVisibleItems;
NSArray *sortedIndexPaths = [visibleCellIndex sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)
NSIndexPath *path1 = (NSIndexPath *)obj1;
NSIndexPath *path2 = (NSIndexPath *)obj2;
return [path1 compare:path2];
];
NSIndexPath* newFirstVisibleCell = [sortedIndexPaths firstObject];
NSIndexPath* newLastVisibleCell = [sortedIndexPaths lastObject];
【问题讨论】:
调用 viewDidLoad 时,数据和单元格尚未初始化,您需要 viewDidAppear 代替 【参考方案1】:如果我误解了你的问题,请纠正我
如果你从情节提要加载collectionView
- (void) viewDidLoad
[super viewDidLoad];
NSArray* visibleCellIndex = self.myCollectionView.indexPathsForVisibleItems;
如果你在某些视图addSubview
collectionView 之后通过代码初始化collectionView 做
NSArray* visibleCellIndex = self.myCollectionView.indexPathsForVisibleItems;
【讨论】:
我已经以编程方式添加了集合视图,我在重新加载集合视图后已经尝试过此代码,但它返回一个空白数组,因为使用相同的代码我在 scrollViewDidScroll 中获取索引路径。【参考方案2】:试试
[self.collectionView layoutIfNeeded];
NSArray *ary = collectionView.visibleCells;
for (UICollectionViewCell *cell in ary)
NSIndexPath *path = [collectionView indexPathForCell:cell];
NSLog(@"indexPath of cell: %d - %d", (int)path.section, (int)path.row);
或使用
-(void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
【讨论】:
以上是关于当 UICollectionView 最初加载其数据时,我们如何获得可见的 Cell IndexPath的主要内容,如果未能解决你的问题,请参考以下文章