Home > Mobile >  Find the visible UITableViewCell when user scrolls to it
Find the visible UITableViewCell when user scrolls to it

Time:06-08

I am using the following code to find the visible cells in my tableview. Everytime the user scrolls only one UITableViewCell is visible to the user but the code below returns two visible rows because this is how the UITableView functioning when user scrolls to a cell.

 NSArray *visibleCells  = [self.tableView indexPathsForVisibleRows];
    for (NSIndexPath *cellIndexPath in visibleCells)
    {
        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:cellIndexPath];
     if ([cell isKindOfClass:[C8SubmittedContentTableViewCell class]]) {
         [submittedContentTableViewCell play];
        }
    }

I run the code above at

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

But as i mentioned UITableView returns two visible cells. How would i know which one of them is really visible to the user? Because if i have two or three videos in a row i need to start playing only the one that is really visible to the user and at the same time stop playing the previous one.

Any thoughts or help appreciated!

CodePudding user response:

Here is possible way:

CGRect cellRect = [self.tableView rectForRowAtIndexPath:cellIndexPath];

CGRect visibleRect;
visibleRect.origin = self.tableView.contentOffset;
visibleRect.size = self.tableView.bounds.size;

BOOL isCellVisible = CGRectContainsRect(visibleRect, cellRect);

Your layout is not clear so possible CGRectIntersectsRect might be needed, or even manual rect to rect matching (say, if cell rect is always bigger then table clip area, the percentage of overlapping should be used).

CodePudding user response:

Use delegate's willDisplayCell for starting video playing and didEndDisplayingCell for stopping.

  • Related