2011-07-28 77 views
4

我目前在Objective-C編寫的Mac App和不能爲我的生活弄清楚如何隱藏NSMenuItem。 (注意:是的,我的意思是隱藏,而不是禁用/變灰,我意識到這樣做會對用戶體驗產生影響,但功能並不是真的如你所想的那樣,只要相信我就可以。)如何隱藏NSMenuItem?

文件沒有提到這樣做,它甚至有可能嗎?

回答

9

如果您已在您的頭文件中定義了您的NSMenuItem並通過您的NIB連接了它,您可以簡單地調用隱藏屬性。

[myMenuItem setHidden:YES]; 

「變灰」 的菜單項將[myMenuItem setEnabled: NO];

+0

setHidden完美工作,感謝。 –

-1

我相信功能可能已經更改爲

[menuItem isHidden: YES] 

https://developer.apple.com/documentation/appkit/nsmenuitem

+0

isHidden是一個getter,而不是setter。你不能改變它。 –

+0

在雨燕4.0,'menuItem.isHidden = TRUE'工作。如果你不相信我,你可以試試。我認爲對象C的API是相同的。也許不是? –

+0

這只是Swift名稱約定。 Cocoa Obj-C屬性被稱爲「隱藏」。爲對象 - 屬性訪問器合成會給你2個干將:「是否隱藏」和「隱藏」和二傳手「setHidden」。所以 - 在Obj-C中使用點符號只能執行X.hidden = YES/NO;或[X setHidden:YES/NO]; –

0

的對象 - 財產被命名爲 「隱藏」 。這意味着,基本布爾構件被命名爲_hidden和3次訪問器爲您自動合成:2級的吸氣劑:isHiddenhidden加一個設定器:setHidden

在的OBJ-C,使用點符號,你可以只設置使用屬性:

myMenuItem.hidden = YES; // or NO 

或在正常的消息:

[myMenuItem setHidden:YES]; // or NO 

來獲取值您可以myMenuItem.hiddenmyMenuItem.isHidden[myMenuItem hidden][myMenuItem setHidden]

現在Swift借用了它的命名約定(在我的語言低於意見)C和C++。布爾屬性的setter和getter命名爲「isHidden」。

當Xcode的轉換與obj-C接口定義隱藏屬性的可可的OBJ-C框架頭---它合成所讀/寫的「是否隱藏」迅速屬性。

這就是爲什麼你可以同時使用的getter和setter:

if myMenuItem.isHidden { 
} 

myMenuItem.isHidden = true // or false 

希望這個覆蓋問題