Swift - UISlider并没有改变它的价值

时间:2017-07-03 19:49:20

标签: ios swift xcode

我以编程方式创建了一个UISlider,我创建了一个时间运行的动作我改变了滑块值。这些动作打印出slider.value。问题是打印出来的值总是0.即使我移动滑块。 这是代码:

import UIKit

class EditVC: UIViewController {

var slider : UISlider {
    let frame = CGRect(x: 10, y: 85, width: editView.frame.width - 30, height: 20)
    let slider = UISlider(frame: frame)
    slider.minimumValue = 0
    slider.maximumValue = 10
    slider.isContinuous = true
    slider.addTarget(self, action: #selector(valueChangedFunc), for: .valueChanged)

    return slider

    }

@objc func valueChangedFunc() {
    print(slider.value)
}



override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(slider)   
}
}

2 个答案:

答案 0 :(得分:0)

我移动了一些代码并删除了函数中的@objc。

 import UIKit

class EditVC: UIViewController {

func addSlider() -> UISlider {
        let frame = CGRect(x: 10, y: 85, width: editView.frame.width - 30, height: 20)
        let slider = UISlider(frame: frame)
        slider.minimumValue = 0
        slider.maximumValue = 10
        slider.isContinuous = true
        slider.addTarget(self, action: #selector(valueChangedFunc), for: .valueChanged)

    return slider

    }

func valueChangedFunc() {
    print(slider.value)
}



override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(addSlider())   
}
}

答案 1 :(得分:0)

您可以使用此代码,我已对其进行了测试并且工作正常

override func viewDidLoad()
{
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    createMPSlider()
}

func createMPSlider()
{
    let mSlider = UISlider(frame: CGRect(x: 20, y: 200, width: UIScreen.main.bounds.size.width * 0.55, height: 60))
    mSlider.addTarget(self, action: #selector(valueChangedOfSlider(slider:)), for: .valueChanged)
    view .addSubview(mSlider)
}

func valueChangedOfSlider(slider: UISlider)
{
    print(slider.value)
}

以上代码工作正常。你需要做的是复制createMPSlider()& valueChangedOfSlider(slider:UISlider)这两个完整的函数并将其粘贴到视图控制器上,并从viewDidLoad调用createMPSlider()它将起作用。 如果需要,可以在顶部声明如果要更改自定义滑块或使用它的实例。