2010-02-12 12 views
25

Làm cách nào để có được mục đã chọn của NSOutlineView bằng cách sử dụng nguồn dữ liệu của riêng tôi. Tôi thấy tôi có thể chọn selectedRow nhưng nó trả về một ID hàng liên quan đến trạng thái của đường viền. Cách duy nhất để làm điều đó là theo dõi trạng thái thu gọn mở rộng của các mục, nhưng điều đó có vẻ vô lý.Làm thế nào để có được mục đã chọn của NSOutlineView mà không cần sử dụng NSTreeController?

Tôi đã hy vọng cho một cái gì đó như:

array = [outlineViewOutlet selectedItems]; 

tôi nhìn vào câu hỏi tương tự khác, họ không có vẻ để trả lời câu hỏi.

+0

Trong trường hợp bất cứ ai tình cờ gặp vấn đề này và đang cố gắng tìm câu trả lời cho nhanh, đây là cổng của mã bên dưới. 'println (MainOutlineList.itemAtRow (MainOutlineList.selectedRow))' – nsij22

Trả lời

67

NSOutlineView thừa hưởng từ NSTableView, vì vậy bạn sẽ có được phương pháp tốt đẹp như selectedRow:

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

Cảm ơn bạn SO nhiều hoạt động như dự định. Tôi muốn tìm thấy nó dễ dàng hơn trong tài liệu của Apple ... –

+0

Tuyệt vời! và đơn giản như vậy! – Colas

+0

Nó trả về -1 cho hàng đã chọn, bạn có thể hướng dẫn im thiếu thứ gì đó không? – Xander

0

@ Dave De Long: câu trả lời tuyệt vời, đây là bản dịch để Swift 3,0

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

Thể hiện được một trường hợp mục là từ lớp FileSystemItem với một fileURL thuộc tính.

Các vấn đề liên quan