我想实现单选菜单,这是我这一代的菜单
subMenu.addItemWithTitle("Item001", action: Selector("testAction:"), keyEquivalent: "\(code)")
subMenu.addItemWithTitle("Item002", action: Selector("testAction:"), keyEquivalent: "\(code)")
subMenu.addItemWithTitle("Item003", action: Selector("testAction:"), keyEquivalent: "\(code)")
subMenu.addItemWithTitle("Item004", action: Selector("testAction:"), keyEquivalent: "\(code)")
subMenu.addItemWithTitle("Item005", action: Selector("testAction:"), keyEquivalent: "\(code)")
subMenu.addItemWithTitle("Item006", action: Selector("testAction:"), keyEquivalent: "\(code)")
如何单选菜单?
func testAction(sender: NSMenuItem){
sender.state = Int(!Bool(sender.state))
if(sender.action == Selector("testAction:")){
var itemMore:NSMenuItem!
for itemMore:AnyObject in sender.menu.itemArray {
if (itemMore.action() == sender.action){
itemMore.state = (itemMore == sender) ? NSOnState : NSOffState;
}
}
}
}
最佳答案
一、解决办法:
func testAction(sender: NSMenuItem){
sender.state = Int(!Bool(sender.state))
if(sender.action == Selector("testAction:")){
for itemMore in sender.menu.itemArray as [NSMenuItem!]{
if (itemMore.action == sender.action){
itemMore.state = (itemMore == sender) ? NSOnState : NSOffState;
}
}
}
}
现在解释一下:
要设置 menuItem 的状态属性,编译器必须知道它是 NSMenuItem 类型。这是通过 for-in 循环中的向下转换来完成的:as [NSMenuItem!]
,正如我所看到的,这就是您在上面的行中尝试的操作:var itemMore:NSMenuItem!
。 (不过,您现在可以删除它。)您正确地选择了隐式展开的 optional ,因为 menu.itemArray 保证不包含 nil 值。
如果你不这样做,编译器会将menuItem视为AnyObject,它恰好有一个NSURLSesionTaskState类型的属性,也称为“状态”。尝试将其设置为 Int(本质上就是 NSOnState/NSOffState)会引发编译器错误。
关于macos - swift:如何单选菜单?使它们互斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042568/