4

我目前正在用 Objective-C 编写一个 Mac 应用程序,但我一生都无法弄清楚如何隐藏 NSMenuItem。(注意:是的,我的意思是隐藏,而不是禁用/灰显。我意识到这样做对用户体验的影响,但功能并不是你想象的那样。相信我。)

无论如何,文档都没有提到这样做,甚至可能吗?

4

3 回答 3

10

如果您NSMenuItem在标题中定义了您的并通过您的 NIB 连接它,您可以简单地调用Hidden属性。

[myMenuItem setHidden:YES];

“灰显”的 menuItem 将是[myMenuItem setEnabled: NO];

于 2011-07-28T06:32:06.323 回答
0

Obj-C 属性被命名为“隐藏”。这意味着,底层布尔成员被命名为 _hidden,并且自动为您合成了 3 个访问器:2 个 getter:isHiddenhidden加上一个 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

希望这涵盖了这个问题

于 2018-01-05T07:41:53.897 回答
0

我相信该功能可能已更改为

[menuItem isHidden: YES]

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

于 2017-12-20T03:03:17.350 回答