如何在 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 中以编程方式启用/禁用屏幕镜像。 [根]