2010-02-12 1 views
25

Как получить выбранный элемент NSOutlineView с использованием моего собственного источника данных. Я вижу, что я могу получить selectRow, но он возвращает идентификатор строки относительно состояния контура. Единственный способ сделать это - отследить расширенное сложенное состояние предметов, но это кажется смешным.Как получить выбранный элемент NSOutlineView без использования NSTreeController?

Я надеялся на что-то вроде:

array = [outlineViewOutlet selectedItems]; 

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

+0

Если кто-то наткнулся на это и пытается найти ответ для быстрого, это порт нижнего кода. 'println (MainOutlineList.itemAtRow (MainOutlineList.selectedRow))' – nsij22

ответ

67

NSOutlineView наследует от NSTableView, так что вы получите хорошие методы, такие как selectedRow:

id selectedItem = [outlineView itemAtRow:[outlineView selectedRow]]; 
+1

Большое спасибо, что работает так, как предполагалось. Мне жаль, что было легче найти его в документах Apple ... –

+0

Отлично! и так просто! – Colas

+0

Он возвращает -1 для выбранной строки, можете ли вы направить им что-нибудь? – Xander

0

De Long @ Dave: отличный ответ, вот перевод на Swift 3.0

@objc private func onItemClicked() { 
    if let item = outlineView.item(atRow: outlineView.clickedRow) as? FileSystemItem { 
     print("selected item url: \(item.fileURL)") 
    } 
} 

Показан где элемент находится из класса FileSystemItem с файлом свойствURL.