2015-01-25 2 views
0

Я пытаюсь показать простой список строк в боковой панели списка источников - аналогично тому, как в Finder или в приложении Github. От чтения protocol reference я не вижу, какой метод устанавливает то, что отображает вид. До сих пор у меня есть:Показать список строк в списке источников (NSOutlineView) в Swift

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, чтобы показать информацию?

ответ

2

Если вы счастливы использовать вид на основе вид контура, а не клеточной один, вы можете заменить метод делегата outlineView:dataCellForTableColumn:item, с его точки зрения эквивалент 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 
} 

Обратите внимание, что важным вызовом в этом методе является метод NSTableViewmakeViewWithIdentifier:owner:. Первый аргумент этого метода - строка DataCell - это значение identifierInterface Builder придает NSTableViewCell объект, он автоматически вставляет в свой NSOutlineView, когда вы перетащите его на холст. Этот объект имеет свойство textField и imageView; все, что вам нужно сделать, это установить значение stringValue объекта textField на значение item.

+0

10/10 работал как рекламируемый. – javanut13

 Смежные вопросы

  • Нет связанных вопросов^_^