2010-04-24 76 views
1

我正在使用一個有兩列的NSOutlineView。我的dataSource爲大綱視圖提供了一個代表文件類型的自定義類的項目樹(也就是說,您使用UTI初始化它)。第一列是文件類型的顯示名稱(例如,「源代碼」,「Interface Builder NIB文檔」等)。第二列是一個NSPopUpButtonCell,它應該允許用戶爲給定的文檔類型選擇一個處理程序(想想Xcode的「文件類型」偏好窗格,而且你幾乎是這樣)。NSOutlineView中動態填充的NSPopUpButtonCell菜單

我可以爲樹中的給定項目生成一個NSMenu,填充基於UTI的啓動服務數據庫條目的選項,並附帶相關的應用程序圖標等等。實際上,菜單本身非常有效,通過NSPopUpButtonCellWillPopUpNotification進行填充。

問題是,盡我所能,當菜單不是彈出的單元格總是包含兩個東西中的一個:要麼是空字符串,要麼是單元格的默認文本,前者如果該項目上的-handlerName的結果(分配給該列的屬性)爲非nil,否則爲後者。

此外,我正在NSPopUpButtonCell實例上手動調用-selectItem:,這似乎是錯誤的。相比之下,左側的列僅僅是一個NSTextFieldCell,一切正常(雖然被授予,但所要做的只是從項目中讀取值並呈現它)。 (免責聲明:我在Cocoa UI的東西里相當新,我知道Objective-C和許多其他編程語言,但是我沒有大量構建Mac OS X UI的經驗,所以請溫和地)。

回答

1

因爲我也在摔跤outlineViews和popUpButtons,我非常想知道這個問題和其他許多問題的答案。我怕我真的不能幫你,但有一兩件事沒有趕上我的眼睛:

我可以在樹

在過去的曲折周產生NSMenu對於給定的項目,我學到了一件事情:在使用NSTreeController和數據源時,總是提供NSTreeNodes設置您的真實對象(在這種情況下爲NSMenu)作爲所代表的對象。