从单元格内的 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】:

子类化可以是解决方案之一,但您也可以从其子视图中获取UICollectionViewCellindexPath。以下代码有望满足您的需求。在您的 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 的索引的主要内容,如果未能解决你的问题,请参考以下文章

使用ScrollView创建用户控件

QML - 获取表格视图单元格内容

无法访问我的单元格内容中的变量

将数据从firebase加载到集合单元格内的tableview

从单元格内容定义范围选择

从集合 1 更新集合中的单元格内容