karthi
karthi

Reputation: 201

Trying to change background image of UISwitch

Code:

 let switchTerms = UISwitch(frame:CGRectMake(XPos, YPos, Width, Height))
        switchTerms.addTarget(self, action: "switchTermsAction:", forControlEvents: .ValueChanged)
         switchTerms.onImage = UIImage(named:"SIGN-UP-toggle-Active.png")
        scrollSignUp!.addSubview(switchTerms);

 func switchTermsAction(sender:UISwitch){

        if sender.on{

            sender.onImage = UIImage(named:"SIGN-UP-toggle-Active.png")
        }
        else{
            sender.offImage = UIImage(named:"SIGN-UP-toggle-DeActive.png")
        }
    }

I tried to change background image of UISwitch when it is changed. Seems background image is not set.

What is wrong with my code?

Upvotes: 1

Views: 2993

Answers (2)

Max
Max

Reputation: 646

@property (weak, nonatomic) IBOutlet UIImageView *genderSwitchBackgroundImageView;
@property (weak, nonatomic) IBOutlet UISwitch *genderSwitch;

...

- (void)viewDidLoad {
    [super viewDidLoad];

    self.genderSwitch.onTintColor = [UIColor clearColor];
    self.genderSwitch.tintColor = [UIColor clearColor];

    [self genderSwitchValueChanged];
}

- (IBAction)genderSwitchValueChanged {
    self.genderSwitchBackgroundImageView.image = [UIImage imageNamed:(self.genderSwitch.isOn ? @"toggle_male" : @"toggle_female")];
}

example

example

Swift:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var genderSwitchBackgroundImageView: UIImageView!
    @IBOutlet weak var genderSwitch: UISwitch!

    override func viewDidLoad() {
        super.viewDidLoad()

        genderSwitch.tintColor = UIColor.clearColor()
        genderSwitch.onTintColor = UIColor.clearColor()

        genderSwitchValueChanged()
    }

    @IBAction func genderSwitchValueChanged() {
        genderSwitchBackgroundImageView.image = UIImage(named:genderSwitch.on ? "toggle_male" : "toggle_female")
    }
}

Upvotes: 4

Dean
Dean

Reputation: 1542

onImage and offImage properties have no effect since iOS7 according to Apple docs

Try to create a UIButton, and set an image on this button according to the selected:Bool property to make it behave like a Switch

When you press the button, make sender.selected = !sender.selected and then refresh the image. You will have a custom switch !

Upvotes: 2

Related Questions