使用`UIScrollView`获取`UITableViewCell` indexPath

时间:2016-03-10 08:07:54

标签: ios objective-c uiscrollview uicollectionview uitableview

我有UITableViewCell,其中包含UICollectionViewUITableViewCell还包含UIPageControl。我想在刷UICollectionView时改变点。我正在使用

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

获取当前可见UICollectionViewCell。但我的问题是,由于UICollectionView位于UITableViewCell以获取对collectionView的引用,因此我需要当前表视图的indexPAth,其中正在刷新集合单元格。我怎么能这样做?

我想这样做:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    // Change the dots
    CustomTableCell *tableCell = [self.currentTable cellForRowAtIndexPath:_tablecellIndex];

    NSInteger currentIndex = tableCell.currentCollectionView.contentOffset.x / tableCell.currentCollectionView.frame.size.width;
    tableCell.currentPageControl.currentPage = currentIndex;
}

但是如何获得_tablecellIndex?

我尝试过:

NSArray *indexes = [self.currentTable visibleCells];
_tablecellIndex = indexes[0];

但这并不总是正确的,因为有时表格单元格显示为一半而用户正在刷第二个单元格。

1 个答案:

答案 0 :(得分:0)

您需要询问tableview本身,给定单元格的索引路径。您可以使用此命令执行此操作:

[self.formTableView indexPathForCell:myCell];

您的案例中的另一个问题是您在单元格的集合视图中,而不在tableview本身内。所以有几种方法可以做到这一点 - 一种不错的方法是在可以访问tableview的单元格上设置委托。这有点牵扯,因此更简单的方式(在这种情况下自我是单元格对象):

UITableView *parentTableView = (UITableView*)self.superview;
NSIndexPath *cellIndexPath = [parentTableView indexPathForCell:self];

那应该做的。