59

I want to perform some action when UISwitch changes its state, thus is set on or off. How do I do this? I need to pass two objects as parameters.

It's created in code, thus not using xib.

Stanislav Pankevich
  • 11,044
  • 8
  • 69
  • 129
Ondrej
  • 1,610
  • 3
  • 19
  • 34

3 Answers3

123
[yourSwitchObject addTarget:self action:@selector(setState:) forControlEvents:UIControlEventValueChanged]; 

This will call the below method when your switch state changes

- (void)setState:(id)sender 
{
    BOOL state = [sender isOn];
    NSString *rez = state == YES ? @"YES" : @"NO";
    NSLog(rez);
}
jrturton
  • 118,105
  • 32
  • 252
  • 268
mac
  • 4,760
  • 7
  • 31
  • 33
16

Obviously we can do the same with Swift, here is the code (compiled and worked with the latest version of the Swift 3.1)

Add action to your switch button:

mySwitch.addTarget(self, action: #selector(self.switchValueDidChange), for: .valueChanged)

And implement this method:

@objc func switchValueDidChange(sender:UISwitch!) {
    print(sender.isOn)
}

Or even if you are not using the sender you may remove:

func switchValueDidChange() {
    // do your stuff
}
Anton Tropashko
  • 5,486
  • 5
  • 41
  • 66
Masih
  • 1,633
  • 4
  • 19
  • 38
0

Easy solution for me (worked with swift 4):

@IBAction func toggleSwitch(_ sender: UISwitch) {
    if(mySwitch.isOn) {
        //Do something
    } else {
        //Do something
    }
}

Link the above function with value changed in Sent Events under connection tab

YWang
  • 21
  • 1