Ondrej
Ondrej

Reputation: 1660

How to call an action when UISwitch changes state?

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.

Upvotes: 59

Views: 46218

Answers (3)

Masih
Masih

Reputation: 1710

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
}

Upvotes: 17

YWang
YWang

Reputation: 31

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

Upvotes: 1

mac
mac

Reputation: 4770

[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);
}

Upvotes: 123

Related Questions