У меня есть приложение на основе документов в Swift 1.2. Я хочу иметь программно сгенерированные NSMenuItem
, которые имеют действие с текущим NSDocument, а затем проверить этот выбор. Вот что у меня есть до сих пор:
Делегирование приложения
// 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
отправляется через цепочку оперативного реагирования? Любая помощь будет принята с благодарностью.
currentIndex
, содержащую индекс текущего пункта меню. При вызове функцииmyMethod
установите состояние пункта меню сcurrentIndex
наNSOffState
, а состояниеsender
наNSOnState
. Затем установитеcurrentIndex
в индексsender
. Это позволяет избежать повторения цикла. - person vadian   schedule 01.02.2016