NSTableView / NSOutlineView 中的自定义视图

Custom view in NSTableView / NSOutlineView

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

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

当我调用 outline.makeViewWithIdentifier("matcher") 时,它成功地 returns 我成为了自定义视图的一个实例。耶!

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

出现两个问题:

您可以在 IB 中定义的 table 列中的视图实际上在 sub-NIBs (NIBs-within-a-NIB) 中,并且它们是 pre-registered 基于它们的标识符。所以,是的,当您为给定标识符注册一个新的 NIB 时,您将替换包含 table 视图的 NIB 中的那个。它不会再被使用,所以你可以从那个 NIB 中删除它。

文本单元格是 cell-based table 视图的遗迹。在IB中无法删除,即使通过text-editing.xib文件删除,下次在IB中打开时也会恢复。我不确定为什么 IB 坚持保留它而不只是隐藏它。您应该忽略它(尽管如果您导出本地化字符串,您可能应该在属性检查器中清除它的标题,否则您的翻译人员将无缘无故地被要求翻译 "Text Cell")。