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

Why is the slider not updating the label when I make the slider 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)"
    }
}

确保您已将动作绑定到滑块.... 这里的 num 是 CGFloat 值,sender.value 是 Fl​​oat...

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

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