如何获得NSOutlineView的可见行索引?

时间:2011-01-19 01:35:36

标签: objective-c cocoa macos nsoutlineview

如何获取NSOutlineView的可见行索引? 我需要知道哪个级别和哪些行可见。

[编辑] 我真正想要的是一个等同于CocoaTouch / UITableView的NSOutlineView - (NSArray *)indexPathsForVisibleRows

4 个答案:

答案 0 :(得分:24)

您可以执行以下操作:

NSScrollView* scrollView = [self.tableView enclosingScrollView];

CGRect visibleRect = scrollView.contentView.visibleRect;

NSRange range = [self.tableView rowsInRect:visibleRect];

在该范围内,您将获得该位置作为第一个可见单元格,并且在长度中显示单元格数量,以便您可以知道可见单元格的索引。

答案 1 :(得分:13)

NSOutlineViewNSTableView子类。因此,-rowsInRect:可以与-visibleRect(来自NSView)结合使用。使用-levelForRow:确定级别。

答案 2 :(得分:0)

我更改了我的数据源以返回outlineView的NSIndexPath:child:ofItem:。 这样我可以使用[outlineview rowAtPoint:point](和类似的)来获取NSIndexPath。

这个更改要求我制作一组这些indexPath,这样在我不需要它们之前它们就不会被释放。此外,通常期望模型对象的所有其他代码现在需要从索引路径查找模型对象。就我而言,这是有效的。

答案 3 :(得分:0)

Swift 3

return Observable.merge(...displayDataChanges).map(() => {
    const data = this.subject.data.slice();

    // Grab the page's slice of data.
    const startIndex = this.paginator.pageIndex * this.paginator.pageSize;
    return data.splice(startIndex, this.paginator.pageSize);
  });