如何获取 NSOutlineView 可见行的索引?我需要知道哪个级别和哪些行是可见的。
[编辑] 我真正在寻找的是一个相当于 CocoaTouch/UITableView 的 NSOutlineView - (NSArray *)indexPathsForVisibleRows
如何获取 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
(from NSView
) 结合。用于-levelForRow:
确定级别。
我更改了我的数据源以返回一个 NSIndexPath 为 outlineView:child:ofItem:。这样我可以使用 [outlineview rowAtPoint:point] (和类似的)来获取 NSIndexPath。
此更改要求我制作一组这些 indexPath,以便在我不需要它们之前不会发布它们。此外,通常需要模型对象的所有其他代码现在都需要从索引路径中查找模型对象。就我而言,这是有效的。
在斯威夫特 3中:
let 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
}