У меня есть приложение на основе документов в Swift 1.2. Я хочу, чтобы программно сгенерировал NSMenuItem
, которые имеют действие с текущим NSDocument, и затем установите этот флажок. Вот то, что я до сих пор:Состояние настройки NSMenuItem не работает
AppDelegate
// generate items
for thing in thingArray {
var newThing = NSMenuItem(title:name, action: Selector("myMethod:"), keyEquivalent: "")
newThing.enabled = true
submenu.addItem(newThing)
}
MyDocument
// 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
отправляется через цепочку первого ответчика? Любая помощь будет принята с благодарностью.
Более эффективный способ сделать это - создать переменную экземпляра 'currentIndex', содержащую индекс текущего пункта меню. Когда вызывается функция 'myMethod', задайте состояние элемента меню в' currentIndex' 'NSOffState' и состояние' sender' 'NSOnState'. Затем установите 'currentIndex' в индекс' sender'. Это позволяет избежать цикла повторения. – vadian
Где вы снимите этот пункт меню? – Willeke
@vadian Это была отличная идея (и я сделаю это независимо), но у меня такое же поведение. – GWRodriguez