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