【问题标题】:How to know we reached the last row of NSTableView如何知道我们到达了 NSTableView 的最后一行
【发布时间】:2013-06-18 14:28:43
【问题描述】:

NSTableView 是我用来显示数百万数据的工具,由于超时,我无法响应。

所以我决定在页面中得到响应的内容是 1-100 然后 101-200 等等。

所以我的问题从这里开始,我怎么知道我已经到达 tableView 的末尾或单元格可见说第 100 行?

我不想实现 Load More.. 之类的按钮等。

在此之后,我将发送一个具有新范围的新响应。


这是我迄今为止尝试过的:

试图通过服务调用跟踪滚动视图并获取下一组数据。

*它适用于旧鼠标,但滑动失败。

【问题讨论】:

  • 抱歉,我误解了你的问题
  • 你不应该担心你到达了哪一行。当您实现数据源时,系统会根据可见的行要求您提供正确的行。将它们放在某个缓存中就足够了。例如,您被要求输入第 50 行,如果该行在缓存中,您只需返回它的值,否则您从 0 到 100 ([N-50,N+50]) 获取行并将它们放入缓存中。跨度>
  • @RamyAlZuhouri:我不想不必要地获取数据。我希望仅在最后一行可见时才获取数据。看到这与 Facebook 和所有其他网站非常相似。我也不想实现Load More.. 那种按钮等
  • 所以你的目标是一种“无限滚动”的 UI,在到达视图末尾时将新行引入模型?
  • @AnoopVaidya 对stackoverflow.com/questions/21795083/…的任何建议

标签: objective-c macos cocoa nstableview


【解决方案1】:

也许您可以在滚动后确定最后一个可见行,我有一个使用此方法的子类 NSTableView

@interface MyTableView : NSTableView
- (NSInteger)lastVisibleRow;
@end


@implementation MyTableView
    - (NSInteger)lastVisibleRow {
        NSRect bounds = [[self superview] bounds];
        bounds.origin.y += bounds.size.height - 1;
        return [self rowAtPoint:bounds.origin];
    }

@end

【讨论】:

  • 太棒了!这对我有帮助。但是我需要将观察者添加到 tableView 滚动条,对吗? NSViewBoundsDidChangeNotification ?然后在通知中我检查是否lastVisible row >= rowcount 然后重新加载更多数据。
猜你喜欢
  • 2011-05-31
  • 2019-06-21
  • 2021-02-27
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
相关资源
最近更新 更多