gpt4 book ai didi

swift - 如何检测选择了哪个 NSMenuItem

转载 作者:行者123 更新时间:2023-11-28 05:54:07 26 4
gpt4 key购买 nike

假设我有一个 menuBar 应用,子菜单上有 3 个项目:

let delaySubMenu = NSMenu()

delaySubMenu.addItem(NSMenuItem(title: "5", action: #selector( setReminder(_:)), keyEquivalent: ""))
delaySubMenu.addItem(NSMenuItem(title: "10", action: #selector(setReminder(_:)), keyEquivalent: ""))
delaySubMenu.addItem(NSMenuItem(title: "15", action: #selector(setReminder(_:)), keyEquivalent: ""))

如何检测我的哪些 delaySubMenu 项目已被选中,而无需为每个项目创建唯一的 setReminder 函数?

谢谢

最佳答案

操作 selector 将接收 sender 对象,就像您使用 Interface Builder 时一样。所以你的 setReminder(_:) 选择器可以有签名:

func setReminder(_ sender: Any) {
// Coerce sender to NSMenuItem and use it to make your decisions
}

或:

func setReminder(_ sender: NSMenuItem) {
// Don't do any coercion work you don't need to do…
}

您还可以设置 tag propertyNSMenuItem到你的延迟值。 tag 属性是 Int 类型,因此非常适合您的值。

当您创建多个条目时,您可以使用 for in 循环遍历 arraydictionary,创建一个新的 每个条目的 NSMenuItem。所以我们可以将您的原始代码更改为类似本示例的代码,其中我使用了 dictionary :

let delaySubMenu = NSMenu()
let delays = ["5 Minutes" : 5, "10 Minutes" : 10, "15 Minutes" : 15] // This is a dictionary of String:Int

for (titleKey, value) in delays {
let menuItem = NSMenuItem(title: titleKey, action: #selector(setReminder(_:)), keyEquivalent: nil)
menuItem.tag = value
delaySubMenu.addItem(menuItem)
}

func setReminder(_ sender: NSMenuItem) {
let delayValue = sender.tag // delayValue is a Int by inference from tag

// Do something with your delay value
}

免责声明:这只是在浏览器中剪切和粘贴,因此可能需要一些调整才能实际工作。

关于swift - 如何检测选择了哪个 NSMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com