Как вы можете получить индексы видимых строк для NSOutlineView? - PullRequest
9 голосов
/ 19 января 2011

Как вы можете получить индексы видимых строк для NSOutlineView?Мне нужно знать, какой уровень и какие строки видны.

[ПРАВИТЬ] Что я на самом деле ищу, так это NSOutlineView, эквивалентный CocoaTouch / UITableView - (NSArray *) indexPathsForVisibleRows

Ответы [ 4 ]

24 голосов
/ 27 июня 2013

вы можете сделать следующее:

NSScrollView* scrollView = [self.tableView enclosingScrollView];

CGRect visibleRect = scrollView.contentView.visibleRect;

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

в диапазоне вы получите местоположение в качестве первой видимой ячейки, а по длине показано количество ячеек, чтобы вы могли узнать индекс видимых ячеек.

13 голосов
/ 19 января 2011

NSOutlineView является подклассом NSTableView.Поэтому -rowsInRect: можно комбинировать с -visibleRect (из NSView).Используйте -levelForRow: для определения уровня.

0 голосов
/ 16 сентября 2017

In Swift 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
}
0 голосов
/ 19 января 2011

Я изменил свой источник данных, чтобы он возвращал NSIndexPath для outlineView: child: ofItem :. Таким образом, я мог бы использовать [outlineview rowAtPoint: point] (и аналогичные), чтобы получить NSIndexPath.

Это изменение потребовало от меня создания набора этих indexPath, чтобы они не выпускались, пока они мне не понадобятся. Кроме того, весь другой код, который обычно ожидал объект модели, теперь должен искать объект модели по пути индекса. В моем случае это было эффективно.

...