Amanda
Amanda

Reputation: 173

Why is the slider not updating the label when I make the slider programmatically?

I made a slider and label PROGRAMMATICALLY. I wanted the label to display the value of the slider, but the label only displays the value I initially assigned.

Code:

var num: CGFloat = 9

override func viewDidLoad() {
    let label = UILabel(frame: CGRectMake(0, 0, 60, 40))
    label.text = "\(num)"
    self.view.addSubview(label)

    let slider = UISlider(frame:CGRectMake(0, 0, 60, 30)) 
    slider.value = Float(num)
    slider.addTarget(self, action: "changedSliderValue:", forControlEvents: .ValueChanged)
    self.view.addSubview(slider)
}

func changedSliderValue(sender: UISlider!){
    num = CGFloat(sender.value)
    label.text = "\(num)"
}

When I did print(label.text!), it showed me that label.text was changing as I changed the slider value. But then, why doesn't the label change on my view controller?

Upvotes: 1

Views: 1246

Answers (2)

Bhoomi Jagani
Bhoomi Jagani

Reputation: 2423

Make sure you have bind action to slider.... Here num is CGFloat value and sender.value is Float...

var num: CGFloat = 9
label.text = "\(num)"

@IBAction func sliderValueChanged(sender: UISlider) {
    num = CGFloat(sender.value)
    label.text = "\(num)"
 }

Upvotes: 0

Dharmesh Kheni
Dharmesh Kheni

Reputation: 71854

You have to create IBAction for that with slider as shown in below code:

@IBAction func sliderValueChanged(sender: UISlider) {

    num = sender.value
    label.text = "\(num)"
}

For more Info refer THIS tutorial.

Update:

Below is your complete working code:

import UIKit

class ViewController: UIViewController {

    var num: CGFloat = 9
    let label = UILabel(frame: CGRectMake(0, 0, 60, 40))

    override func viewDidLoad() {
        super.viewDidLoad()

        label.text = "\(num)"
        self.view.addSubview(label)

        let slider = UISlider(frame:CGRectMake(0, 0, 60, 30))
        slider.value = Float(num)
        slider.addTarget(self, action: "changedSliderValue:", forControlEvents: .ValueChanged)
        self.view.addSubview(slider)
    }

    func changedSliderValue(sender: UISlider!){
        num = CGFloat(sender.value)
        label.text = "\(num)"
    }
}

Upvotes: 1

Related Questions