你如何获取NSOutlineView可见行的索引?
我需要知道哪个级别和哪些行是可见的。
[编辑]
实际上,我正在寻找与CocoaTouch / UITableView等效的NSOutlineView -(NSArray *)indexPathsForVisibleRows。
你可以按照以下方式操作:
NSScrollView* scrollView = [self.tableView enclosingScrollView];
CGRect visibleRect = scrollView.contentView.visibleRect;
NSRange range = [self.tableView rowsInRect:visibleRect];
在范围内,您将获得第一个可见单元格作为位置,并且在长度中显示了单元格的数量,以便您可以知道可见单元格的索引。
NSOutlineView
是 NSTableView
的子类。因此,-rowsInRect:
可以与 -visibleRect
(来自 NSView
)组合使用。使用 -levelForRow:
来确定级别。
NSTableView
和异步加载图像也非常有帮助。 - Keith Smileylet rows = IndexSet(integersIn: 0..<outlineView.numberOfRows)
let rowViews = rows.flatMap { outlineView.rowView(atRow: $0, makeIfNecessary: false) as? RowView }
for rowView in rowViews
//iterate over rows
}
.rowView
的文档中可以得知:"通常情况下,如果您只想在视图可用时(通常意味着它是可见的)更新视图上的属性,则应将makeIfNecessary设置为false。"可见行始终可用。但是,有些行可能已准备好显示或已离开表格并可用而未被显示,因此我们可以在仅需要可见行时获取它们。 - João Colaço我将我的数据源更改为返回一个NSIndexPath,以便在outlineView:child:ofItem:中使用[outlineview rowAtPoint:point](和类似的方法)来获取NSIndexPath。
这个更改要求我创建一组这些indexPaths,以便在不需要它们时它们不会被释放。此外,所有通常期望模型对象的其他代码现在都需要从索引路径中查找模型对象。在我的情况下,这是有效的。