我正在尝试使用Xcode 7的新单选按钮模板(NSButton)检测当前选择的单选按钮。
我创建了一个简单的操作,当选择单选按钮时,该操作将打印以记录发件人的标题。这确实有效:
@IBAction func radioButtonClicked(sender: AnyObject)
{
print(sender.selectedCell()!.title);
}
但我真正想要的是能够知道在我的代码中的其他位置选择了哪个单选按钮(特别是在按钮单击的IBAction上)。我试过了:
@IBAction func uploadButtonPressed(sender: AnyObject)
{
print (radioButton.selectedCell()!.title);
}
这会编译并执行,问题是它总是给我第一个单选按钮的标题而不是实际选择的那个。
有什么想法吗?
<小时/> 我能得到的“最接近的”(这不是很干净,但工作“有点”)是看 radioButton.cell?state = 1 。这告诉我第一个单选按钮被选中。但这是一种非常糟糕的编码方式,只允许2个单选按钮选项。
if (radioButton.cell?.state == 1)
{
print ("Radio 1 Selected");
}
else
{
print ("Radio 2 Selected");
}
答案 0 :(得分:2)
使用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")
}
}
答案 1 :(得分:0)
我最终找到了一种方法。
首先我设置一个变量来存储检查了哪个项目(并将值预先设置为我想要的第一个单选按钮的值)
var databaseUploadMethod = "trickle-add";
然后我进行比较以查看所选项目的标题值:
@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";
}
}
供参考:我有两个单选按钮,第一个标题为&#34; Trickle Add&#34;第二个是&#34;批量立即添加所有&#34;。这些是我在if语句中比较的值。