2

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

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

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

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

Interface Builder 中的表格视图

出现两个问题:

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

1 回答 1

2

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

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

于 2015-09-02T04:57:11.600 回答