UISwitch set on/off Image

后端 未结 3 1409
無奈伤痛
無奈伤痛 2021-01-04 11:37

I want to set my Switch like this:

But I try in ios9 , it does not work. I saw in apple UISwitch Class Reference. It says that :

Discussion In iOS 7

相关标签:
3条回答
  • 2021-01-04 12:13

    For iOS 13, you could do this way:

       let switcher = UISwitch()
        switcher.addTarget(self, action: #selector(pressed), for: .valueChanged)
        
    
     @objc func pressed(sender: UISwitch) {
            let color = UIColor(patternImage: UIImage(named: sender.isOn ? "on.png": "off.png")!)
            if sender.isOn {
                sender.onTintColor = color
            } else {
                sender.tintColor = color
                sender.subviews[0].subviews[0].backgroundColor = color
            }
        }
    

    NOTE: your image should look like:

    Then the final result is:

    0 讨论(0)
  • 2021-01-04 12:16

    Use a UIButton instead.

    let switchButton = UIButton(type: .Custom)
    switchButton.selected = true
    switchButton.setImage(UIImage(named: "on-switch"), forState: .Selected)
    switchButton.setImage(UIImage(named: "off-switch"), forState: .Normal)
    

    Use switchButton.isSelected instead of switch1.on. You'll have to toggle switchButton.isSelected when it is tapped, which you can do like this:

    switchButton.isSelected.toggle()
    
    0 讨论(0)
  • 2021-01-04 12:28

    Not an exact answer to your question, but if you want a completely custom button switch programmatically (that you can add text to), this will work too:

     import UIKit
    
     class RDHiddenVisibleButton: UIButton {
    
        // Hidden / Visible Button Function
        var isOn = false
    
        override init(frame: CGRect) {
            super.init(frame: frame)
            initButton()
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            initButton()
        }
    
        func initButton() {
            layer.borderWidth = 2.0
            layer.borderColor = Colors.radiusGreen.cgColor
            layer.cornerRadius = frame.size.height/2
    
            setTitleColor(Colors.radiusGreen, for: .normal)
            addTarget(self, action: #selector(RDHiddenVisibleButton.buttonPressed), for: .touchUpInside)
    
        }
    
    @objc func buttonPressed() {
            activateButton(bool: !isOn)
        }
    
        func activateButton(bool: Bool) {
    
            isOn = bool
    
            let color = bool ? Colors.radiusGreen : .clear
            let title = bool ? "Hidden" : "Visible"
            let titleColor = bool ? . white : Colors.radiusGreen
    
            setTitle(title, for: .normal)
            setTitleColor(titleColor, for: .normal)
            backgroundColor = color
        }
    }
    
    0 讨论(0)
提交回复
热议问题