ios - 监控 UITableViewCell 在屏幕上显示多长时间

标签 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,并在不再可见时停止它。
这有许多缺陷:
  • 当 tableview 出现时,用户可以在不滚动的情况下查看第一个单元格 - 因此不会调用此代码。
  • 这段代码每秒调用几十次——一定有更好的方法
  • 例如,当用户正在查看第二个单元格时,将调用此代码,但第一个单元格仍然有几个像素可见。所以应该有一个条件,即调用必须至少有 20% 可见才能使计时器处于事件状态。
  • 如果用户在查看单元格时点击另一个标签栏,此代码不知道并继续计数 .

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

    最佳答案

    使用 TableView 委托(delegate)方法和 View Controller 显示方法。具体来说:

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

    关于ios - 监控 UITableViewCell 在屏幕上显示多长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21736351/

    相关文章:

    ios - 应用程序不显示在 iPad 中

    objective-c - 在 UITableView 初始化中设置选定的单元格

    php - JSON数据没有从objective-C插入到mysql数据库中

    ios - Objective C 为什么我的 NSMutableArray 中的对象消失了?

    objective-c - Objective-C 中类扩展的正确文件命名约定是什么?

    ios - 禁用背景颜色更改,但在 UITableViewCell 突出显示时启用文本颜色更改

    objective-c - Obj-C、UITableView UI 改进以处理大量记录,也就是点击下一步获取更多行?

    ios - UIScrollView 优于 MKMapView

    ios - UIButton 的 rx_tap 不通过嵌套订阅发送请求,如何直接转化为网络请求?

    ios - Swift 4 为什么委托(delegate)不起作用