Xcode v7.2 - 新的单选按钮:如何找到选中的

Xcode v7.2 - New Radio Buttons: How to find selected

我正在尝试使用 Xcode 7 的新单选按钮模板 (NSButton) 检测当前选择了哪个单选按钮。

我创建了一个简单的操作,该动作将打印以在选择广播按钮时记录发件人的标题。这确实有效:

@IBAction func radioButtonClicked(sender: AnyObject)
    {
    print(sender.selectedCell()!.title);
    }

但我真正想要的是能够知道在我的代码中其他地方选择了哪个单选按钮(特别是在 IBAction 上单击按钮)。我试过:

@IBAction func uploadButtonPressed(sender: AnyObject)
    {
    print (radioButton.selectedCell()!.title);
    }

这确实可以编译和执行,问题是它总是给我第一个单选按钮的标题,而不是实际选中的那个。

有什么想法吗?


我能得到的"closest"(这不是很干净,但有效"kinda")是看是否radioButton.cell?state = 1。这告诉我第一个单选按钮被选中。但这是一种非常糟糕的编码方式,只允许 2 个单选按钮选项。

if (radioButton.cell?.state == 1)
    {
    print ("Radio 1 Selected");
    }
else
    {
    print ("Radio 2 Selected");
    }

我最终找到了一个方法。

首先,我设置了一个变量来存储选中的项目(并且 pre-set 值是我想要的第一个单选按钮的值)

var databaseUploadMethod = "trickle-add";

那我对比一下,看选中的title值:

@IBAction func radioButtonClicked(sender: AnyObject)
    {
    if ((sender.selectedCell()!.title) == "Trickle Add")
        {
        databaseUploadMethod = "trickle-add";
        }
    else if ((sender.selectedCell()!.title) == "Bulk Add All Now")
        {
        databaseUploadMethod = "bulk-add";
        }
    }

供参考:我有两个单选按钮,第一个的标题是 "Trickle Add",第二个是 "Bulk Add All Now"。这些是我在 if 语句中比较的值。

在 Interface Builder 中使用标识符或标记 属性 来区分单选按钮,例如:

@IBAction func selectOption(sender: AnyObject) {
    let id:String = sender.identifier!!
    case "first identifier":
        // do some stuff
        // ...
    default:
        // do default stuff
}

另一种选择是 switch-case 语句并为每个单选按钮定义出口,例如:

@IBOutlet weak var firstOption: NSButton!
@IBOutlet weak var secondOption: NSButton!
@IBOutlet weak var thirdOption: NSButton!

@IBAction func selectOption(sender: AnyObject) {

    switch sender as! NSButton {
    case firstOption:
        print("firstOption")
    case secondOption:
        print("secondOption")
    case thirdOption:
        print("thirdOption")
    default:
        print("won't be called when exhaustive but must always be implemented")
    }
}