如何隐藏 NSMenuItem?

发布于 2024-11-26 15:10:39 字数 154 浏览 3 评论 0原文

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

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

I'm currently writing a Mac App in Objective-C and can't for the life of me figure out how to hide a NSMenuItem. (Note: Yes I really mean hide, not disable/grey-out. I realize the UX implications of doing so, but the functionality isn't really what you think it is. Just trust me on this.)

The documentation doesn't mention anyway to do so, is it even possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

飘落散花 2024-12-03 15:10:39

如果您已在标头中定义了 NSMenuItem 并通过 NIB 连接它,则只需调用 Hidden 属性即可。

[myMenuItem setHidden:YES];

“变灰”菜单项将是 [myMenuItem setEnabled: NO];

If you have defined your NSMenuItem in your header and connected it through your NIB, you can simply call the Hidden property.

[myMenuItem setHidden:YES];

"Greying out" the menuItem would be [myMenuItem setEnabled: NO];

快乐很简单 2024-12-03 15:10:39

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

[menuItem isHidden: YES]

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

I believe the function may have changed to

[menuItem isHidden: YES]

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

愿与i 2024-12-03 15:10:39

Obj-C 属性被命名为“隐藏”。这意味着,底层布尔成员名为 _hidden,并且会自动为您合成 3 个访问器:2 个 getter:isHiddenhidden 加上 1 个 setter:setHidden代码>.

在 Obj-C 中,使用点表示法,您只能使用以下方式设置属性:

myMenuItem.hidden = YES; // or NO

或在普通消息中:

[myMenuItem setHidden:YES]; // or NO

要获取值,您可以 myMenuItem.hiddenmyMenuItem.isHidden[myMenuItem hide][myMenuItem setHidden]

现在 Swift 从(我认为语言上较差的)C 和 C++ 借用了其命名约定。布尔属性的 setter 和 getter 都名为“isHidden”。

当 Xcode 使用定义隐藏属性的 Obj-C 接口转换 Cocoa Obj-C Framework 标头时,它会合成一个读/写的“isHidden”swift 属性。

这就是为什么你可以同时使用 getter 和 setter:

if myMenuItem.isHidden {
}

myMenuItem.isHidden = true // or false

希望这能解决这个问题

The Obj-C property is named "hidden". This means, the underlying boolean member is named _hidden, and 3 accessors are automatically synthesized for you: 2 getters: isHidden and hidden plus one setter: setHidden.

In Obj-C, using dot notation you can only set the property using:

myMenuItem.hidden = YES; // or NO

or in normal message:

[myMenuItem setHidden:YES]; // or NO

to get the value you can either myMenuItem.hidden, myMenuItem.isHidden, [myMenuItem hidden] or [myMenuItem setHidden]

Now Swift borrows its naming convention from the (lingually inferior in my opinion) C and C++. A boolean property will have both its setter and getter named "isHidden".

When Xcode converts the Cocoa Obj-C Framework headers with the Obj-C interface defining the property hidden --- it synthesizes an "isHidden" swift property which is read/write.

That's why you can use both as getter and setter:

if myMenuItem.isHidden {
}

and

myMenuItem.isHidden = true // or false

Hope this covers the issue

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文