macos - swift:如何单选菜单?使它们互斥?

标签 macos swift swift-playground

enter image description here 我想实现单选菜单,这是我这一代的菜单

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)")

enter image description here 如何单选菜单?

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/

相关文章:

mysql - 如何在 Sequel Pro 中编辑现有索引?

c++ - OpenCV 人脸检测速度慢?

ios - 使用 hitTest() 或 point(inside, with event) 从添加到 keyWindow 的 View 转发事件

ios - Swift:如何检测 UISplitViewController 当前是否显示 1 个或 2 个 Controller ?

swift - 为什么总是输入条件语句时这个变量没有初始化?

objective-c - 如何检测 cocoa 中的右键和左键单击

c++ - Mac 中的 Xcode (C++) 是否有等同于 'strupr' 的东西?

swift - 即使在设备旋转后也约束/居中 CAEmitterLayer

ios - 删除动态调整 TableView 的行?

swift - UIImageView 动画 Playground