在UICollectionView
中,我希望在我定义的CGRect中获得NSIndexPath
。
在UITableView
的情况下,方法为-indexPathsForRowsInRect:
但在UICollectionView
?
答案 0 :(得分:2)
您可以通过每个UICollectionViewLayout
上的UICollectionView
实例获取任何指定rect的索引路径。
调用-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
将为您提供一系列UICollectionViewLayoutAttributes
个对象,每个对象都有关联的NSIndexPath
。
示例类别方法:
@implementation UICollectionView (Example)
- (NSArray<NSIndexPath *> *)attributeIndexPathsForRect:(CGRect)rect {
NSArray<UICollectionViewLayoutAttributes *> *allAttribs = [self.collectionViewLayout layoutAttributesForElementsInRect:rect];
NSMutableArray<NSIndexPath *> *indexPaths = [[NSMutableArray alloc] init];
for (UICollectionViewLayoutAttributes *attribs in allAttribs) {
[indexPaths addObject:attribs.indexPath];
}
return indexPaths;
}
@end
答案 1 :(得分:0)
Will Kiefer答案的Swift版本
myCollectionView.collectionViewLayout.layoutAttributesForElements(in:myRect)!.map { $0.indexPath }