如何在 Swift 中以编程方式启用/禁用菜单对象

Posted

技术标签:

【中文标题】如何在 Swift 中以编程方式启用/禁用菜单对象【英文标题】:How to en-/disable Menu-Object programmatically in Swift 【发布时间】:2016-05-29 13:17:04 【问题描述】:

我想在 Swift 中以编程方式启用/禁用Menu-Object。我找到了一个Apple Developer Library:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSMenuItem_Class/#//apple_ref/occ/instp/NSMenuItem/enabled

但是如何使用代码获取对Menu-Object 的引用并以编程方式设置其状态?

【问题讨论】:

看看validateMenuItem: @vadian 不起作用 菜单项验证功能非常强大但也非常敏感。这取决于 Interface Builder 和您的设计中的一些设置。如果菜单不在响应者链中,您可以将菜单的委托(不是菜单项)连接到处理验证的类。 【参考方案1】:

对于 Swift 4+,Barath's Answer 中的一些代码已被弃用。我还认为通过搜索 menuitem 标题而不是它们的索引,代码更具适应性:

let mainMenu = NSApplication.shared.mainMenu!
let subMenu = mainMenu.item(withTitle: "Edit")?.submenu

subMenu?.item(withTitle: "Cut")?.isEnabled = false

此外,只要 setAutoenablesItems 设置为 true,将 isEnabled 设置为 true 或 false 将不会切换菜单项。可以从情节提要或通过编程方式禁用它。

【讨论】:

【参考方案2】:

使用以下代码启用或禁用菜单项而不进行子类化。

let mainMenu = NSApplication.sharedApplication().mainMenu!
let appMenu = mainMenu.itemAtIndex(0)!.submenu

appMenu?.itemWithTitle("Title")?.enabled = false

【讨论】:

【参考方案3】:

您可以通过编程方式设置启用属性:menObj.enabled = false

【讨论】:

现在如何将Menu-Object 转为menObj 如果您制作了故事板,您可以通过 IBOutlet 获得与菜单对象的连接。然后您可以轻松访问所有属性。 文件应该有哪个子类? 尝试了解什么是 IBOutlets。每个 UIView 元素都是兼容的。 - 获取短视频说明:teamtreehouse.com/library/build-a-simple-iphone-app/… 我能够创建到 AppDelegate 的连接,但不能创建到我需要的控制器。

以上是关于如何在 Swift 中以编程方式启用/禁用菜单对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中以编程方式启用禁用 GPS? [复制]

如何在android中以编程方式关闭3G数据连接?

在 Android 中以编程方式启用/禁用屏幕镜像。 [根]

如何在android中以编程方式启用位置访问?

如何在 Swift 中以编程方式将 UILabel 对象居中?

如何在 Swift 中以编程方式更改 UIButton 状态