访问位于设备屏幕中心的UICollectionView单元格中的视图

时间:2017-01-03 21:39:05

标签: ios objective-c uiscrollview uicollectionview uicollectionviewcell

如果在滚动发生后单元格位于设备屏幕的中心,我试图在集合视图单元格中更改视图的背景颜色。我目前有一个工作方法,可以在滚动后改变所有当前可见单元格中的视图的背景颜色,如下所示:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{


    if(scrollView==_collectionViewFollwersFeed)
    {
        for (UICollectionViewCell *cell in [self.collectionViewFollwersFeed visibleCells]) {

            UIView *tsView;

            tsView=(UIView *)[cell viewWithTag:99];

            tsView.backgroundColor = [UIColor redColor];

        }
    }
}

当我尝试编辑此方法以仅更改位于中间的单元格内的视图的背景颜色时,我无法使此功能正常工作。以下是我认为应该有效的调整:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{


    if(scrollView==_collectionViewFollwersFeed)
    {

        NSIndexPath *centerCellIndexPath =
        [self.collectionViewFollwersFeed indexPathForItemAtPoint:
         [self.view convertPoint:[self.view center] toView:self.collectionViewFollwersFeed]];

        UICollectionViewCell *cell;
        NSString *CellIdentifier;

        CellIdentifier = @"FollowersFeed";
        cell = [_collectionViewFollwersFeed dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:centerCellIndexPath];

        UIView *tsView = (UIView *)[cell viewWithTag:99];

        tsView.backgroundColor = [UIColor redColor];

    }
}

有没有人知道为什么这种方法不会改变屏幕中心的Cell的背景颜色?

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

cell = [_collectionViewFollwersFeed dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:centerCellIndexPath];

即创建一个新的单元格,而不是您的集合视图当前正在显示的单元格。

要访问集合视图中已有的单元格,请使用:

cell = [_collectionViewFollwersFeed cellForItemAtIndexPath:centerCellIndexPath];