Swift/UISwitch: how to implement a delegate/listener
UISwitch
has no delegate protocol. You can listen to the status as follows:
ObjC:
// somewhere in your setup:[self.mySwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];- (void)switchChanged:(UISwitch *)sender { // Do something BOOL value = sender.on;}
Swift:
mySwitch.addTarget(self, action: "switchChanged:", forControlEvents: UIControlEvents.ValueChanged)func switchChanged(mySwitch: UISwitch) { let value = mySwitch.on // Do something}
Swift3 :
mySwitch.addTarget(self, action: #selector(switchChanged), for: UIControlEvents.valueChanged)func switchChanged(mySwitch: UISwitch) { let value = mySwitch.isOn // Do something}
Swift4:
mySwitch.addTarget(self, action: #selector(switchChanged), for: UIControl.Event.valueChanged)@objc func switchChanged(mySwitch: UISwitch) { let value = mySwitch.isOn // Do something}
In Swift4.0
mySwitch.addTarget(self, action: #selector(valueChange), for:UIControlEvents.valueChanged) @objc func valueChange(mySwitch: UISwitch) { let value = mySwitch.isOn // Do something print("switch value changed \(value)") }
Swift 3:
Using Storyboard Autolayout:
Add Reference:
@IBOutlet weak var sampleSwitch: UISwitch!
Associate method:
@IBAction func sampleSwitchValueChanged(_ sender: Any) { if sampleSwitch.isOn { print("ON") } else { print ("OFF") }}
Programatic way:
Adding Target:
sampleSwitch.addTarget(self, action: #selector(ViewController.sampleSwitchValueChanged(sender:)), for: UIControlEvents.valueChanged)
The method associated with the switch:
func sampleSwitchValueChanged(sender: UISwitch!) { if sender.isOn { print("switch on") } else { } }