I'm using Xcode 6 and Swift to develop an OS X app, not iOS. Let's say we have two toggle buttons and each one controls a combobox. Everytime press the button, it will enable or disable the combobox it controls. I can definately set up separate actions for each button. Since I have ten buttons, this approach seems to contain a lot of redundant code.
@IBAction func clickBtn1 (sender: NSButton){
if combobox1.enabled == true
{
combobox1.enabled = faulse;
}
else
{
combobox1.enabled = true;
}
}
@IBAction func clickBtn2 (sender: NSButton){
//same codes for combobox 2
}
Is there any way to make this simpler, such as share the action code by identify different sender, Similar to VB.NET?
UPDATE: I found a imcomplete solution for it from https://stackoverflow.com/a/24842728/2784097
now I control+drag the two buttons to the same action in ViewController.swift and also give those two buttons different tag. button1.tag=1, button2.tag = 2. The code now looks like,
//button1.tag=1, button2.tag = 2.
@IBAction func clickButton(sender:NSButton) {
switch(sender.tag){
case 0:
combobox1.enabled = !combobox1.enabled;
break;
case 1:
combobox2.enabled = !combobox2.enabled;
break;
default:
break;
}
}
This solves a part of my problem. Next, I wonder is there any way to access/find the controls/components by reference, for example a string or tag or name anything. Pseudo code would like following,
//button1.tag=1, button2.tag = 2.
@IBAction func clickButton(sender:NSButton) {
//pseudo code
combobox[button.tag].enabled = !combobox[button.tag].enabled;
}