2010-02-12 12 views
25

Jak uzyskać wybrany element z NSOutlineView przy użyciu mojego własnego źródła danych. Widzę, że mogę uzyskać selectedRow, ale zwraca identyfikator wiersza względny do stanu konspektu. Jedynym sposobem, aby to zrobić, jest śledzenie rozszerzonego stanu zwiniętych elementów, ale wydaje się to śmieszne.Jak uzyskać wybrany element NSOutlineView bez korzystania z NSTreeController?

Miałem nadzieję na coś takiego:

array = [outlineViewOutlet selectedItems]; 

Patrzyłem na innych podobnych pytań, nie wydaje się, aby odpowiedzieć na to pytanie.

+0

W przypadku, gdy ktokolwiek natknie się na to i próbuje znaleźć odpowiedź na szybkie, jest to port poniższego kodu. 'println (MainOutlineList.itemAtRow (MainOutlineList.selectedRow))' – nsij22

Odpowiedz

67

NSOutlineView dziedziczy z NSTableView, więc masz ładne metod, takich jak: selectedRow

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

Dziękuję bardzo, że działa zgodnie z przeznaczeniem. Szkoda, że ​​nie było łatwiej znaleźć go w dokumentach Apple ... –

+0

Świetnie! i takie proste! – Colas

+0

Zwraca -1 dla wybranego wiersza, czy możesz go im czegoś pominąć? – Xander

0

@Dave De Long: doskonałą odpowiedź, Oto tłumaczenie do Swift 3.0

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

Pokazany jest przypadek, w którym element pochodzi z klasy FileSystemItem z właściwością plikURUR.