在 Swift 中显示源列表 (NSOutlineView) 中的字符串列表

Show list of strings in Source List (NSOutlineView) in Swift

我正在尝试在源列表边栏中显示一个简单的字符串列表 - 类似于 Finder 或 Github 应用程序中的列表。通过阅读 protocol reference,我看不到哪种方法正在设置视图显示的内容。到目前为止我有:

var items: [String] = ["Item 1", "Item 2", "Item is an item", "Thing"]
func outlineView(outlineView: NSOutlineView, child index: Int, ofItem item: AnyObject?) -> AnyObject {
    return items[index]
}

func outlineView(outlineView: NSOutlineView, isItemExpandable item: AnyObject) -> Bool {
    return false
}
func outlineView(outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int {
    if item == nil {
        return items.count
    }
    return 0
}
func outlineView(outlineView: NSOutlineView, objectValueForTableColumn tableColumn: NSTableColumn?, byItem item: AnyObject?) -> AnyObject? {
    return "ITEM"
}
func outlineView(outlineView: NSOutlineView, setObjectValue object: AnyObject?, forTableColumn tableColumn: NSTableColumn?, byItem item: AnyObject?) {
    println(object, tableColumn, item)
}
// Delegate
func outlineView(outlineView: NSOutlineView, dataCellForTableColumn tableColumn: NSTableColumn?, tem item: AnyObject) -> NSCell? {
    println("Called")
    let view = NSCell()
    view.stringValue = item as String
    return view
}

我得到的只是一个包含四个空白项(无文本)的源列表。我是否需要重写 NSOutlineViewDelegate 中的另一个方法来显示信息?

如果您愿意使用 基于视图的 大纲视图,而不是 基于单元格的 视图,您可以替换委托方法 outlineView:dataCellForTableColumn:item,其 view 等效 outlineView:viewForTableColumn:item:

func outlineView(outlineView: NSOutlineView,
    viewForTableColumn tableColumn: NSTableColumn?,
    item: AnyObject) -> NSView? {

    var v = outlineView.makeViewWithIdentifier("DataCell", owner: self) as NSTableCellView
    if let tf = v.textField {
        tf.stringValue = item as String
    }
    return v
} 

请注意,此方法中的重要调用是 NSTableView 方法 makeViewWithIdentifier:owner:。此方法的第一个参数 - 字符串 DataCell - 是 identifier Interface BuilderNSTableViewCell 对象,当您将它拖到 canvas 上时,它会自动插入到您的 NSOutlineView 中。这个对象有一个textField 属性,和一个imageView;您需要做的就是将 textFieldstringValue 属性 设置为 item.

的值