我目前正在Objective-C中编写一个Mac应用程序,并且在我的生活中无法弄清楚如何隐藏NSMenuItem。 (注意:是的,我的意思是隐藏,而不是禁用/灰显。我意识到这样做会影响用户体验,但功能并不是你认为的那样。只要相信我就可以了。)
文档没有提到这样做,甚至可能吗?
如果您在标题中定义了NSMenuItem
并通过NIB连接它,则只需调用隐藏属性即可。
[myMenuItem setHidden:YES];
“灰色”menuItem将是[myMenuItem setEnabled: NO];
Obj-C属性被命名为“隐藏”。这意味着,底层布尔成员名为_hidden,并为您自动合成3个访问器:2个getters:isHidden
和hidden
加上一个setter:setHidden
。
在Obj-C中,使用点表示法只能使用以下方法设置属性:
myMenuItem.hidden = YES; // or NO
或者在正常消息中:
[myMenuItem setHidden:YES]; // or NO
获得价值你可以myMenuItem.hidden
,myMenuItem.isHidden
,[myMenuItem hidden]
或[myMenuItem setHidden]
现在,斯威夫特从(在我看来,语言上的劣势)C和C ++中借用了它的命名约定。布尔属性将其setter和getter命名为“isHidden”。
当Xcode使用定义隐藏属性的Obj-C接口转换Cocoa Obj-C Framework头时,它会合成一个“isHidden”swift属性,它是读/写的。
这就是为什么你可以同时使用getter和setter:
if myMenuItem.isHidden {
}
和
myMenuItem.isHidden = true // or false
希望这能涵盖这个问题