Swift/UISwitch: how to implement a delegate/listener Swift/UISwitch: how to implement a delegate/listener ios ios

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 {        }    }