2

我有一個基於視圖的NSOutlineView,我爲其中一列提供自定義視圖(NSTableCellView的子類)。我註冊使用該子視圖:在NSTableView/NSOutlineView中的自定義視圖

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

當我打電話outline.makeViewWithIdentifier("matcher"),它成功地返回了我的自定義視圖的一個實例。好極了!

雖然在界面生成器中,我注意到我可以完全刪除matcher列中的NSTableCellView控件(請參見下文)。

Table view in Interface Builder

出現了兩個問題:

  • 我認爲它的工作原理在運行時因爲調用registerNib()告訴表使用筆尖,而不是將已經由接口定義的一個生成器。它是否正確?
  • 在我提供自定義視圖的上下文中,您可以在下面的截圖中看到Text Cell控件。我無法刪除它,但我不確定它代表什麼。

回答

2

您可以在表格列中在IB中定義的視圖實際上是在子NIB(NIB內的NIB)中,並且它們是基於其標識符預先註冊的。所以,是的,當您爲給定的標識符註冊一個新的NIB時,您將替換包含表視圖的NIB中的一個。它不會再被使用,所以你可以從該NIB中刪除它。

文本單元格是基於單元格表格視圖的痕跡。它不能在IB中刪除,即使通過文本編輯.xib文件刪除它,下次在IB中打開它時也會恢復。我不確定爲什麼IB堅持保留它,而不是隱藏它。您應該忽略它(儘管如果您爲本地化導出字符串,或者您的翻譯員被要求翻譯「文本單元格」時沒有很好的理由,您可能應該在「屬性」檢查器中清除其標題)。

+0

謝謝Ken,那很完美。一切似乎都行得通,但能夠多瞭解一些基本原因是很好的。非常感謝。 –