如何在NSOutlineView中继承NSTableRow

时间:2016-03-27 16:15:05

标签: cocoa nstableview

要更改NSOutlineView侧边栏突出显示颜色,NSTableRow需要使用override func drawSelectionInRect进行子类化。如果代码中当前没有对NSTableRow的公开引用,这怎么可能?

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

}

使用emphazised属性

的简单解决方案可能存在潜力
func outlineViewSelectionDidChange(notification: NSNotification){
    let selectedIndex = notification.object?.selectedRow
    let object:AnyObject? = notification.object?.itemAtRow(selectedIndex!)
    notification.object?.rowViewAtRow(selectedIndex!, makeIfNecessary: false)?.emphasized = false
    outlineView.deselectRow(selectedIndex!)

1 个答案:

答案 0 :(得分:2)

就像你使用

一样
func outlineView(outlineView: NSOutlineView, viewForTableColumn: NSTableColumn?, item: AnyObject) -> NSView? {...}

你可以使用

func outlineView(_ outlineView: NSOutlineView, rowViewForItem item: AnyObject) -> NSTableRowView? {...} 

for rowViews。

以下是您的操作方法:

  1. 子类NSTableRowView并实现drawSelectionInRect:以自定义子类的外观。

  2. 通过在rowViewForItem:中返回它来确保您的outlineView了解您的子类 您可以在此方法here中查看如何返回视图。

  3. 由于您只覆盖了drawSelectionInRect:所有其他功能仍然可用。所以你不必做任何其他事情。