如何在使用自己的数据源时获取NSOutlineView中选定的项目。我发现可以使用selectedRow获取,但它返回相对于大纲状态的行ID。唯一的方法是跟踪项的展开/折叠状态,但这似乎很荒谬。
我希望有像以下这样的东西:
array = [outlineViewOutlet selectedItems];
我查看了其他类似的问题,它们似乎没有回答我的问题。
NSOutlineView
继承自 NSTableView
,因此您可以使用像 selectedRow
这样的好方法:
id selectedItem = [outlineView itemAtRow:[outlineView selectedRow]];
-1
是 NSNotFound
)。 - Dave DeLongSwift 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) {
}
}
小贴士:您也可以通过以下方式获取所选项的父项
:
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)")
}
}
println(MainOutlineList.itemAtRow(MainOutlineList.selectedRow))
。 - nsij22