28

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

我希望有类似的东西:

array = [outlineViewOutlet selectedItems];

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

4

3 回答 3

77

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

id selectedItem = [outlineView itemAtRow:[outlineView selectedRow]];
于 2010-02-12T17:25:22.317 回答
3

斯威夫特 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){
            
      }  
   } 
}
于 2020-08-03T14:03:45.310 回答
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 来自具有属性 fileURL 的类 FileSystemItem 的情况。

于 2017-02-06T14:57:02.623 回答