2012-04-19 41 views
2

我是一位.NET開發人員,他正在試圖訪問Windows應用程序的OSX端口。我使用MonoDevelop和MonoMac(使用XCode Interface Builder)來創建我的UI。XCode/MonoMac中的自定義控件等效

來自Windows,我想了解一個「UserControl」的可可等價物,因爲我在我的WinForm版本中廣泛使用了這些。我有一組控件(讓我們說一個標籤,文本框和按鈕),我想在整個Cocoa UI的各個地方打包並重用。

從我的理解,我需要通過繼承NSView(我們稱之爲「MyView」)來創建一個「自定義視圖」。我可以在Interface Builder中創建「MyView」,但是當我在主窗口上使用它時,它總是顯示爲空/空白。

下面是我如何將控件放置在IB的主窗體中:我從對象庫中添加一個自定義視圖(NSView),然後將「自定義類」下的「類」屬性更改爲「MyView」。如果控件在設計時沒有渲染,這不是問題,但它在運行時也完全是空的。

我懷疑我錯過了一些非常簡單/明顯的事情。是否應該以這種方式使用自定義視圖?我在網上找到的所有示例似乎都討論了自定義繪圖,這是我不想要的(我只想使用一堆控件,以便重用它們)。外面的任何人都可以爲我解釋這一點嗎?

在此先感謝。

回答

3

如果你只是想要一組標準控件,那麼你可能需要一個獨立的視圖NIB/XIB。然後,每次要實例化該組時,都會加載該NIB,從中獲取頂級視圖,並將該視圖插入其他視圖層次結構中。您將使用NSViewController(或自定義子類)來擁有並加載該NIB。

您還可以爲已經包含窗口的NIB添加一個獨立的視圖。 NIB的所有者(通常是NSWindowController或子類的一個實例)將有一個引用該獨立視圖層次結構的出口。然後,您的代碼可以隨意使用該視圖層次結構,並將其插入到適當位置的窗口視圖層次結構中。

您通常不使用自定義視圖類來分組標準控件。您只能創建一個視圖子類來創建一個非標準視圖,一個以自定義方式繪製或提供不同的操作技巧。

+0

謝謝,這是非常有幫助的(抱歉響應緩慢......我跟蹤了一邊)。我仍然在將我的控制權完全插入到視圖層次結構中,但我的開局不錯。 – 2012-05-11 19:03:17

1

這爲我工作:

  1. 放一個「自定義視圖」到你的窗口(不要重命名身份檢查器中的類)。

  2. 在窗口控制器中爲自定義視圖創建一個名爲「CustomView」的插座。

  3. 在你窗控制器awakeFromNib方法中添加以下代碼

this.CustomView.AddSubview(new YourCustomViewController().View); 

注:其他回答這個問題,假設您的觀點有沒有廈門國際銀行,並由此顯示空的,因爲它不是裝正常。

+0

這也適用於我,謝謝你的提示。 – 2013-11-17 21:19:55