Macos Mac:取消选中子菜单项

Macos Mac:取消选中子菜单项,macos,swift,statusbar,radio,Macos,Swift,Statusbar,Radio,这就是我想要实现的目标 在子菜单1下,有三个选项可供选择:默认操作、操作1和操作2。我想做一些类似单选按钮功能的事情,如果选择了一个选项,另一个将自动取消选中 我想知道是否有任何方法可以在其他IBAction函数中执行其他IBAction函数的NSOffState或nsState。 例如,用户在启动新游戏时必须在初级、中级或高级模式之间进行选择的菜单 e、 g 显然,由于缺乏声誉,我不能发布任何图片。 我将它链接到dropbox图像; 这里有一个苹果官方页面的链接,介绍setState。 “

这就是我想要实现的目标

在子菜单1下,有三个选项可供选择:默认操作、操作1和操作2。我想做一些类似单选按钮功能的事情,如果选择了一个选项,另一个将自动取消选中

我想知道是否有任何方法可以在其他IBAction函数中执行其他IBAction函数的NSOffState或nsState。 例如,用户在启动新游戏时必须在初级、中级或高级模式之间进行选择的菜单

e、 g

显然,由于缺乏声誉,我不能发布任何图片。 我将它链接到dropbox图像;

这里有一个苹果官方页面的链接,介绍setState。


“您可以使用状态来实现一组相互排斥的菜单项,就像一组单选按钮一样。例如,一个游戏可以有三个菜单项来显示游戏级别:初学者、中级和高级。要实现这样一个组,请创建一条他们都使用的操作消息。此操作消息会更改相应的设置,然后通过取消选中当前选中的项目并选中新选中的项目来反映该更改。“

有很多方法可以做到这一点。下面是一个简单的示例:

@IBOutlet weak var testsMenu: NSMenu!

func actionCommonToAllMenus(#current: NSMenuItem) {
    // Loops over the array of menu items
    for menuItem in testsMenu.itemArray as! [NSMenuItem] {
        // Switches off the first (and unique) 'on' item
        if menuItem.state == NSOnState {
            menuItem.state = NSOffState
            break
        }
    }
    // Previous 'on' item is now 'off', time to set the current item to 'on'
    current.state = NSOnState
}

@IBAction func actionMenuOne(sender: NSMenuItem) {
    actionCommonToAllMenus(current: sender)
    // do menu 1 stuff
}

@IBAction func actionMenuTwo(sender: NSMenuItem) {
    actionCommonToAllMenus(current: sender)
    // do menu 2 stuff
}

通过创建所有菜单通用的操作,您可以避免在每个菜单操作中添加控制代码,您只需调用
actionCommonToAllMenus
方法。

如何在Visual Studio for Mac中使用Xamarin.Forms Cocoa应用程序执行此操作?
@IBOutlet weak var testsMenu: NSMenu!

func actionCommonToAllMenus(#current: NSMenuItem) {
    // Loops over the array of menu items
    for menuItem in testsMenu.itemArray as! [NSMenuItem] {
        // Switches off the first (and unique) 'on' item
        if menuItem.state == NSOnState {
            menuItem.state = NSOffState
            break
        }
    }
    // Previous 'on' item is now 'off', time to set the current item to 'on'
    current.state = NSOnState
}

@IBAction func actionMenuOne(sender: NSMenuItem) {
    actionCommonToAllMenus(current: sender)
    // do menu 1 stuff
}

@IBAction func actionMenuTwo(sender: NSMenuItem) {
    actionCommonToAllMenus(current: sender)
    // do menu 2 stuff
}