gpt4 book ai didi

swift - NSMenuItem 设置状态不起作用

转载 作者:行者123 更新时间:2023-11-28 06:50:12 26 4
gpt4 key购买 nike

我在 Swift 1.2 中有一个基于文档的应用程序。我想以编程方式生成对当前 NSDocument 有操作的 NSMenuItem,然后检查该选择。这是我到目前为止所拥有的:

AppDelegate

// generate items
for thing in thingArray {
var newThing = NSMenuItem(title:name, action: Selector("myMethod:"), keyEquivalent: "")
newThing.enabled = true
submenu.addItem(newThing)
}

我的文档

// getting current AppDelegate
let app = NSApplication.sharedApplication().delegate as! AppDelegate

// called by user selected menu item
@IBAction func myMethod(sender: NSMenuItem) {
let parent = sender.parentItem!

// iterate through all Items to setState: NSOffState

for item in parent.submenu!.itemArray as! [NSMenuItem] {
if workspace?.name == item.title {
item.state = NSOnState
break
}
}
}

我知道 item.state 之前的所有代码都在工作。我把打印日志来测试它。但是发生的情况通常是菜单项没有被选中,但偶尔会被选中。

我最好的猜测是菜单没有刷新,但我不确定该怎么做。是否也可能是 NSMenuItem 的操作是通过 First Responder 链发送的?任何帮助将不胜感激。

最佳答案

好的...我知道发生了什么。 AppDelegate 中创建菜单项的部分每 3 秒调用一次(我正在使用的 API 的一部分)。问题是正在重新创建菜单项,因此我设置的状态并不总是菜单中的当前 NSMenuItem

我发现我可以在 NSDocument 中使用 validateMenuItem 来更新符合我的条件的每个菜单项。

override func validateMenuItem(menuItem: NSMenuItem) -> Bool {
menuItem.state = workspaceIndex == menuItem.tag ? NSOnState : NSOffState
return true
}

关于swift - NSMenuItem 设置状态不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35123188/

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