2011-01-19 58 views
9

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

[编辑] 什么实际上,我寻找的是一个NSOutlineView相当于CocoaTouch/UITableView中 - (NSArray的*)indexPathsForVisibleRows

回答

0

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

此更改要求我制作一组这些indexPath,以便在我不需要它们之前不会发布它们。此外,所有其他通常期望模型对象的代码现在需要从索引路径中查找模型对象。在我的情况下,这是有效的。

13

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

+0

好像你将不得不迭代模型计数到行号。我真的不想要线性时间....除非我失去了一些东西? – Cal 2011-01-19 03:35:53

+0

我不确定你的意思。您可以通过itemForRow将行翻译为其实际对象:等。 – 2011-01-19 03:51:23

+0

对不起......我的问题不够详细。我其实希望能够获得可见行的树坐标。例如,在我的情况下,树有两个级别,所以它将有两个叶节点索引。 – Cal 2011-01-19 04:04:48

22

,你可以做到以下几点:

NSScrollView* scrollView = [self.tableView enclosingScrollView]; 

CGRect visibleRect = scrollView.contentView.visibleRect; 

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

您将得到该位置作为第一个可见单元格,并在长度细胞的数量显示这样你就可以知道可见单元的索引。

0

斯威夫特3

let rows = IndexSet(integersIn: 0..<outlineView.numberOfRows) 
let rowViews = rows.flatMap { outlineView.rowView(atRow: $0, makeIfNecessary: false) as? TimelineRowView } 

for rowView in rowViews 
    //iterate over rows 
} 
相关问题