从单元格内的 ScrollView 访问 UICollectionViewCell 的索引
Posted
技术标签:
【中文标题】从单元格内的 ScrollView 访问 UICollectionViewCell 的索引【英文标题】:Accessing index of UICollectionViewCell from a ScrollView inside the cell 【发布时间】:2016-10-07 08:35:50 【问题描述】:我有一个集合视图,在集合视图单元格内,我有一个滚动视图,我想在其中显示一些图片。
我在情节提要的 collectionviewcell 中放置了一个 ScrollView,并在我的 -collectionView:cellForItemAtIndexPath
方法中初始化了 ScrollView,如下所示:
UIScrollView *scrollView = [cell viewWithTag:20];
scrollView.delegate = self;
[scrollView setContentSize:CGSizeMake((cell.frame.size.width*images.count), scrollView.frame.size.height)];
scrollView.userInteractionEnabled = NO;
[cell addGestureRecognizer:imagesScrollView.panGestureRecognizer];
只有images
数组中的第一个图像应该在第一次加载视图时加载,其余的图像需要在用户滚动滚动视图时在-scrollViewDidScroll
方法中动态加载。但是,这些图像取决于我的 scrollView 所在的 collectionviewcell 的索引。
如何通过-scrollViewDidScroll
方法访问collectionviewcell 的索引?
另外,这似乎是一种可行的方法来实现我想要做的事情,还是我需要继承 UICollectionViewCell?
【问题讨论】:
【参考方案1】:子类化可以是解决方案之一,但您也可以从其子视图中获取UICollectionViewCell
的indexPath
。以下代码有望满足您的需求。在您的 scrollViewDidScroll:
方法中使用它。
UIView *superview = scrollView;
while (![superview isKindOfClass:[UICollectionViewCell class]])
superview = superview.superview;
UICollectionViewCell *cell = (UICollectionViewCell *)superview;
NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];
NSLog(@"IndexPath: %@", indexPath);
确保您没有在此 viewController 的其他地方使用滚动视图。
【讨论】:
这就是我要找的。我试图做类似的事情,但没有先将superview
转换为UICollectionViewCell
,我一直收到 NSInvalidArgumentException。应该想到这一点。谢谢!以上是关于从单元格内的 ScrollView 访问 UICollectionViewCell 的索引的主要内容,如果未能解决你的问题,请参考以下文章