如何使用我自己的数据源获取 NSOutlineView 的选定项。我看到我可以获得 selectedRow 但它返回相对于大纲状态的行 ID。唯一的方法是跟踪项目的展开折叠状态,但这似乎很荒谬。
我希望有类似的东西:
array = [outlineViewOutlet selectedItems];
我看了其他类似的问题,他们似乎没有回答这个问题。
NSOutlineView
继承自NSTableView
,因此您可以获得很好的方法,例如selectedRow
:
id selectedItem = [outlineView itemAtRow:[outlineView selectedRow]];
斯威夫特 5
NSOutlineView 有一个委托方法outlineViewSelectionDidChange
func outlineViewSelectionDidChange(_ notification: Notification) {
// Get the outline view from notification object
guard let outlineView = notification.object as? NSOutlineView else {return}
// Here you can get your selected item using selectedRow
if let item = outlineView.item(atRow: outlineView.selectedRow) {
}
}
额外提示:您还可以parent item
像这样获取所选项目的:
func outlineViewSelectionDidChange(_ notification: Notification) {
// Get the outline view from notification object
guard let outlineView = notification.object as? NSOutlineView else {return}
// Here you can get your selected item using selectedRow
if let item = outlineView.item(atRow: outlineView.selectedRow) {
// Get the parent item
if let parentItem = outlineView.parent(forItem: item){
}
}
}
@Dave De Long:很好的答案,这里是 Swift 3.0 的翻译
@objc private func onItemClicked() {
if let item = outlineView.item(atRow: outlineView.clickedRow) as? FileSystemItem {
print("selected item url: \(item.fileURL)")
}
}
显示的是 item 来自具有属性 fileURL 的类 FileSystemItem 的情况。