当我以编程方式制作滑块时,为什么滑块不更新标签?

问题描述:

我制作了滑块和标签PROGRAMMATICALLY。我希望标签显示滑块的值,但标签只显示最初分配的值。当我以编程方式制作滑块时,为什么滑块不更新标签?

代码:

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)" 
} 

当我做print(label.text!),它向我表明label.text被改变,因为我改变了滑块值。但那么,为什么我的视图控制器上的标签没有更改?

你必须创建IBAction为与滑块如下图所示代码:

@IBAction func sliderValueChanged(sender: UISlider) { 

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

欲了解更多信息请参阅THIS教程。

更新:

下面是完整的工作代码:

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)" 
    } 
} 
+0

对不起,如果我没有说清楚,但我以编程方式创建了滑块和标签** – Amanda

+0

你能显示你的完整代码吗? –

+0

比编程设置目标滑块@Amanda像'slider.addTarget(self,action:“sliderValueChanged:”,forControlEvents:.ValueChanged)'...更多信息...检查http://www.apptuitions.com/programmatically -creating-uiview-uislider-uiswitch-using-swift/ –

请确保您有绑定行动滑块.... 这里num是CGFloat的价值和sender.value是浮动...

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

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

绑定你的slider'es动作ValueChanged ....你必须转换为CGFloat – Bhoomi