如何在不使用NSTreeController的情况下获取NSOutlineView的选定项目?

时间:2010-02-12 16:42:23

标签: cocoa pyobjc

如何使用我自己的数据源获取NSOutlineView的选定项目。 我看到我可以获得selectedRow但它返回相对于轮廓状态的行ID。唯一的方法是跟踪项目的扩展折叠状态,但这看起来很荒谬。

我希望有类似的东西:

array = [outlineViewOutlet selectedItems];

我看了其他类似的问题,他们似乎没有回答这个问题。

3 个答案:

答案 0 :(得分:71)

NSOutlineView继承自NSTableView,因此您可以获得更好的方法,例如selectedRow

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

答案 1 :(得分:1)

@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来自类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){
            
      }  
   } 
}