Ian Campelo
Ian Campelo

Reputation: 163

Programmatically change slider value and update the Label

I have 3 sliders as shown above:

Sliders

And when the "Min tip" it's equal or greater than "Default tip", I add 1 to "Default tip". And the same logic it's for Default to Max tip.

So, until now I have this code, that works partially because the Default tip's slider grows in the UI, but the label isn't updated because the delegate isn't called.

@IBOutlet weak var minLabel: UILabel!
@IBOutlet weak var defaultLabel: UILabel!
@IBOutlet weak var maxLabel: UILabel!


@IBOutlet weak var minSlider: UISlider!
@IBOutlet weak var defaultSlider: UISlider!
@IBOutlet weak var maxSlider: UISlider!

override func viewDidLoad() {
    super.viewDidLoad()

    minSlider.addTarget(self, action: #selector(SettingsViewController.minSliderValueChanged(_:)), forControlEvents: UIControlEvents.AllEvents)

    defaultSlider.addTarget(self, action: #selector(SettingsViewController.defaultSliderValueChanged(_:)), forControlEvents: UIControlEvents.AllEvents)


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func minSliderValueChanged(sender: UISlider) {
    let valueMin = Int(minSlider.value)
    let valueDefault = Int(defaultSlider.value)
    _ = Int(maxSlider.value)

    minLabel.text = "Min tip: \(valueMin)%"
    if(valueMin >= valueDefault){
        defaultSlider.value = Float(valueMin+1)
    }

}

@IBAction func defaultSliderValueChanged(sender: UISlider) {
    let value = Int(defaultSlider.value)
    defaultLabel.text = "Default tip: \(value)%"

}

@IBAction func maxSliderValueChanged(sender: UISlider) {
    let value = Int(maxSlider.value)
    maxLabel.text = "Max tip: \(value)%"
}

What I'm missing?

Upvotes: 4

Views: 9648

Answers (2)

Constantine
Constantine

Reputation: 781

Slider values range from 0 (slider at left end) to 1 (slider at right end). By doing let valueMin = Int(minSlider.value), variable valueMin can either be 0, or 1. I assume this isn't what you want really.

Perhaps this is closer to what you're looking for?

@IBAction func minSliderValueChanged(sender: UISlider) {
    let valueMin = minSlider.value
    let valueDefault = defaultSlider.value
    _ = Int(maxSlider.value)

    minLabel.text = "Min tip: \(Int(valueMin*100))%"
    if(valueMin >= valueDefault){
        defaultSlider.value = valueMin
    }
}

Upvotes: 1

erikvdplas
erikvdplas

Reputation: 551

After defaultSlider.value = Float(valueMin+1) update the text of the label, like so:

defaultLabel.text = "Default tip: \(valueMin+1)%"

Upvotes: 3

Related Questions