UICollectionView – 根据水平滚动更新数组索引path

您好我使用两个收集单元格来显示数据,子集合视图值是基于主集合视图。

我有video列表,当我selectvideo在表即时通讯完整的数组在索引path,以便主集合视图将显示基于选定的数组的索引path。

它显示正常,但是当我滚动水平,我传递可见的单元格indexPath数据来获取子集合查看数据。

但是,当我滚动主集合视图,在indexPath数组不会更新基于主集合视图它始终显示相同的IndexPath从video列表(前视图控制器)。

如何更新基于水平滚动的主集合视图数组。

我想要离开这个场景 –

例如VIdeo列表数组是1,2,3,4

我select3索引,并传递给videolist数组的collections视图,显示选定的索引path行值,当我向右滚动索引path应该增加到4左右它应该减less到2,对于video上select的任何值列表数组。 主集合视图应该基于传递的索引path工作,并根据其索引path行事

我的代码 –

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { if(self.childCollectionView ==collectionView) { return [self.array_ChildElements count]; } else { return [self.array_VideoList count]; } } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { if (collectionView ==self.collectionView) { VVCollectionCell *cell = (VVCollectionCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"VVCollectionCell" forIndexPath:indexPath]; VVSystems *obj; if (self.iscalledFromVideoLIst) { obj =self.array_VideoList[self.selectedIndexPath.row]; } else { obj =self.array_VideoList[indexPath.row]; } [self.collectionView flashScrollIndicators]; NSLog(@"Current Index Path--->%ld",(long)self.selectedIndexPath.row); NSLog(@"Current Title--->%@",obj.title); [cell.labelVideoTitle setText:obj.title]; [cell.imgVideo sd_setImageWithURL:[NSURL URLWithString:obj.iconImage] placeholderImage:nil]; return cell; } else { childCollectionCell *cell2 = (childCollectionCell *)[self.childCollectionView dequeueReusableCellWithReuseIdentifier:@"childCollectionCell" forIndexPath:indexPath]; ChildAnimations *obj = self.array_ChildElements[indexPath.row]; [self.childCollectionView flashScrollIndicators]; [cell2.labelTitel setText:obj.tagName]; [cell2.imgbackGround sd_setImageWithURL:[NSURL URLWithString:obj.image] placeholderImage:nil]; return cell2; } } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { for (VVCollectionCell *cell in [self.collectionView visibleCells]) { NSIndexPath *newIndexPath = [self.collectionView indexPathForCell:cell]; VVSystems *objCustVehiclesList =self.array_VideoList[newIndexPath.row]; NSLog(@"Current Index Path Row -->%ld",(long)newIndexPath.row); NSLog(@"Current Title--->%@",objCustVehiclesList.title); self.str_partID =objCustVehiclesList.partID; [self ServiceCallForChildVideo:self.str_partID]; self.iscalledFromVideoLIst = NO; } } 

在这里输入图像说明

他们的方式你发现可见的细胞是正确的。 我怀疑你在这里的条件

 if (self.iscalledFromVideoLIst) { obj =self.array_VideoList[self.selectedIndexPath.row]; } else { obj =self.array_VideoList[indexPath.row]; } 

这可能会给你不同的索引path。 我不知道你什么时候设置这个值self.iscalledFromVideoLIst

不同的方法是使用。 cell.labelVideoTitle.tag = indexPath.row; 但是不要把这个放在条件之内。 并访问您的标签标题

 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

方法。

主要是你需要debugging你的方法,看看你滚动的时候indexPath是什么,问题主要在这里。 尝试在这里打印indexPath.row,你会看到这个问题。

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 

我明白了,如果你想用videoList数据左右滚动。

正确的方法是当VC调用“viewDidLoad”时,最后一行添加:

 [self.collectionView scrollToItemAtIndexPath:self.selectedIndexPath atScrollPosition:UICollectionViewScrollPositionNone animated:NO]; 

并编辑代码:

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { if (collectionView ==self.collectionView) { VVCollectionCell *cell = (VVCollectionCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"VVCollectionCell" forIndexPath:indexPath]; // VVSystems *obj; // if (self.iscalledFromVideoLIst) // { // obj =self.array_VideoList[self.selectedIndexPath.row]; // } // else // { // obj =self.array_VideoList[indexPath.row]; // } VVSystems *obj=self.array_VideoList[indexPath.row]; [self.collectionView flashScrollIndicators]; NSLog(@"Current Index Path--->%ld",(long)self.selectedIndexPath.row); NSLog(@"Current Title--->%@",obj.title); [cell.labelVideoTitle setText:obj.title]; [cell.imgVideo sd_setImageWithURL:[NSURL URLWithString:obj.iconImage] placeholderImage:nil]; return cell; } else { childCollectionCell *cell2 = (childCollectionCell *)[self.childCollectionView dequeueReusableCellWithReuseIdentifier:@"childCollectionCell" forIndexPath:indexPath]; ChildAnimations *obj = self.array_ChildElements[indexPath.row]; [self.childCollectionView flashScrollIndicators]; [cell2.labelTitel setText:obj.tagName]; [cell2.imgbackGround sd_setImageWithURL:[NSURL URLWithString:obj.image] placeholderImage:nil]; return cell2; } }