监视UITableViewCell在屏幕上显示的时间



为了优化和衡量,我正在努力找到最好的方法来节省我的应用程序用户查看每个UITableViewCell的时间。我还没有找到可以监控它的工具(Parse、AppSee等),所以我正在手动进行。问题是,它的效率非常低。

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
UITableView *tableView = self.tableView; // Or however you get your table view
NSArray *paths = [tableView indexPathsForVisibleRows];
//  For getting the cells themselves
NSMutableSet *visibleCells = [[NSMutableSet alloc] init];
for (NSIndexPath *path in paths) {
NSLog(@"visible: %i", path.row);
[visibleCells addObject:[tableView cellForRowAtIndexPath:path]];
}
}

然后,我将在不可见时立即启动NSTimer,并在不再可见时停止它。这有很多缺陷:

  1. 当显示表视图时,用户可以在不滚动的情况下查看第一个单元格,因此不会调用此代码
  2. 这个代码每秒被调用几十次——肯定有更好的方法
  3. 例如,当用户正在查看第二个单元格,但第一个单元格仍有几个像素可见时,就会调用此代码。因此,应该有一个条件,即呼叫必须至少有20%可见,才能使计时器处于活动状态
  4. 如果用户在查看单元格时点击另一个选项卡栏,则此代码不知道并继续计数

我的解决方案显然不是最优的。有更好的方法吗?欢迎您的解决方案

使用表视图委托方法和视图控制器显示方法。具体而言:

tableView:willDisplayCell:forRowAtIndexPath:
tableView:didEndDisplayingCell:forRowAtIndexPath:
viewDidDisappear:

最新更新