如何使用我自己的数据源获取NSOutlineView的选定项目。 我看到我可以获得selectedRow但它返回相对于轮廓状态的行ID。唯一的方法是跟踪项目的扩展折叠状态,但这看起来很荒谬。
我希望有类似的东西:
array = [outlineViewOutlet selectedItems];
我看了其他类似的问题,他们似乎没有回答这个问题。
答案 0 :(得分:71)
NSOutlineView
继承自NSTableView
,因此您可以获得更好的方法,例如selectedRow
:
id selectedItem = [outlineView itemAtRow:[outlineView selectedRow]];
答案 1 :(得分:1)
@objc private func onItemClicked() {
if let item = outlineView.item(atRow: outlineView.clickedRow) as? FileSystemItem {
print("selected item url: \(item.fileURL)")
}
}
显示的情况是item来自类FileSystemItem,其属性为fileURL。
答案 2 :(得分:0)
快捷键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){
}
}
}