NSTableView / NSOutlineView

时间:2015-09-02 03:46:12

标签: interface-builder nstableview nsoutlineview nstablecellview

我有一个基于视图的NSOutlineView我正在为其中一个列提供自定义视图(NSTableCellView的子类)。我正在使用以下方式注册此子视图:

let nib = NSNib(nibNamed: "MyMatcherView", bundle: NSBundle.mainBundle())
outlineView.registerNib(nib, forIdentifier: "matcher")

当我致电outline.makeViewWithIdentifier("matcher")时,它会成功返回我的自定义视图的实例。耶!

在Interface Builder中,我注意到我可以完全删除NSTableCellView列中的matcher控件(见下文)。

Table view in Interface Builder

出现两个问题:

  • 我假设它在运行时工作,因为对registerNib()的调用告诉表使用该nib,而不是Interface Builder定义的那个。这是对的吗?
  • 在我提供自定义视图的上下文中,您可以在下面的屏幕截图中看到Text Cell控件是什么。我无法删除它,我不确定它代表什么。

1 个答案:

答案 0 :(得分:2)

您可以在表列中的IB中定义的视图实际上位于子NIB(NIB内部的NIB)中,并且它们是根据其标识符预先注册的。所以,是的,当您为给定标识符注册新的NIB时,您将替换包含表视图的NIB中的NIB。它将不再使用,因此您可以从该NIB中删除它。

Text Cell是来自基于单元格的表格视图的遗留物。它无法在IB中删除,即使您通过文本编辑.xib文件删除它,它也会在下次在IB中打开时恢复。我不确定为什么IB坚持要保留它而不仅仅是隐藏它。您应该忽略它(尽管如果您导出字符串以进行本地化,您可能应该在“属性”检查器中清除其标题,否则将要求您的译员翻译“文本单元格”)。