How to call an action when UISwitch changes state?

2020-08-09 08:08发布

问题:

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.

回答1:

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


回答2:

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
}


回答3:

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