2012-07-20 65 views
2

我有一個關於NSMenuItems的問題。帶圖像和文字的NSMenuItem

我想要做的是使用本地osx組件複製java GUI,因此我使用的語言是Cocoa。我想要做的是讓每個菜單項都有一個圖像,然後在旁邊有一些文本。

我已經對它進行了一些研究,我的第一個通話端口(通常看起來是大聲笑)是有這個方便的例子(https://developer.apple.com/library/mac/#samplecode/MenuItemView/Listings/MyWindowController_m.html#//apple_ref/doc/uid/DTS10004136-MyWindowController_m-DontLinkElementID_8)的蘋果文檔。 說明如何在菜單項中嵌入視圖。

相對比較新的可可,我想我會不得不重寫從NSMenuItem繪圖方法之一。雖然不是很確定。 我正在玩的另一個想法是創建一個自定義視圖,其中包含圖像和一些文本。

任何其他想法/驗證或討論將不勝感激。

謝謝大家!

哦,GUI的創建是由手工完成的,沒有界面構建器。

回答

9

好的,所以我現在有菜單項旁邊有圖標。對於任何對此感興趣的人來說(我沒有對它進行任何泄漏分析)。首先,把你想要的所有圖像放到「Resources」文件夾中(這就是它在xcode 3.1.4中調用的內容)。

現在,例如,在我們擁有所有圖像之後,我們要使用名爲「eraser.png」和「eraser_on.png」的圖像,並且我想將它們附加到第3個菜單項。爲了實現這一點,我們做了以下內容:

下面的代碼將在菜單

NSMenuItem *item = [ nameOfPopUpButton itemAtIndex:2]; 

下面的代碼將設置圖像獲取菜單項在第3位的菜單項是「橡皮擦。PNG」

[ item setImage: [ NSImage imageNamed:@"eraser"] ]; 

這是你設置菜單項的圖像(這將是對文本的左側文本之前AKA)。

如果你想爲不同狀態不同​​的圖像,例如,當用戶按下它,用這個方法(未測試自己,但它聽起來似乎在理:d和功能是直接從API)

[item setOnStateImage: [ NSImage imageNamed:@"eraser_on" ] ] 

但是,您可以把它爲零或不設置它在所有和它會去默認顏色

希望這可以幫助別人。

從拼湊了一起:https://developer.apple.com/library/mac/#samplecode/MenuMadness/Listings/Controller_m.html#//apple_ref/doc/uid/DTS40008870-Controller_m-DontLinkElementID_4

謝謝:)

2

如果您需要這樣做,您有創建帶有圖像和標籤子視圖的視圖的正確理念。

但是:不要這樣做。創建一個「本地」應用程序主要不是關於你選擇的語言(Objective-C,順便說一句,不是Cocoa;後者是在Objective-C中實現的開發框架集合)。這與遵守平臺有關。

在OS X(和iOS)上,比其他任何平臺都要多,UI設計的一致性至關重要。用戶知道當一個應用程序看起來很奇怪,並且每個菜單項旁邊有圖標(我肯定已經在Java應用程序中看到過)是絕對是在OS X上有奇怪和不自然的現象。用戶在最壞情況下會感到惱火。

所以我的建議是要麼遵循人機界面指南(並且保存很多工作作爲一個很好的副作用),要麼只是堅持現有的Java應用程序。

如果您想提供對常用功能的快速圖標訪問,OS X上推薦的方法是使用工具欄。

+0

真棒,優秀的建議感謝您的幫助。我想我會在菜單中提供對圖標的支持,但默認情況下沒有它們。去看看工具欄,看看是否會是更好的解決方案。非常感謝:) – andrewktmeikle 2012-07-20 09:43:59

+0

現在我知道你如何附加圖像我發佈了下面的解決方案,但感謝您的有用的提示! :) – andrewktmeikle 2012-07-20 14:18:07