Reputation: 173
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
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
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