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

时间:2014-02-12 18:20:51

标签: ios objective-c uitableview timer

我正在尝试找到保存应用用户多长时间查看每个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. 当呈现tableview时,用户可以在不滚动的情况下查看第一个单元格 - 因此不会调用此代码。
  2. 这段代码每秒被称为几十次 - 必须有更好的方法
  3. 当用户查看例如第二个单元格时,将调用此代码,但第一个单元格仍然可见几个像素。因此,应该存在一个条件,其中呼叫必须至少20%可见才能使定时器激活。
  4. 如果用户在查看单元格时点击另一个标签栏,则此代码无法识别并继续计数
  5. 我的解决方案显然不是最佳选择。有更好的方法吗?欢迎您的解决方案

1 个答案:

答案 0 :(得分:3)

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

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