2017-07-03 40 views
0

我以编程方式创建了UISlider,并且创建了一个运行加速的操作,我更改了滑块值。这些动作输出slider.value。问题是打印出的值始终为0.即使我移动滑块。 这是代码:Swift - UISlider不更改其值

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

该代码是否正确?你有一个名为'sliderI'的变量,但是稍后你会参考'slider'' – chedabob

+0

当我写这个问题时,这只是一个错字。现在很好,谢谢 –

+0

您已经为'slider'创建了一个只读的计算属性,每次调用它时都会返回一个新的“UISlider”实例。 – chedabob

回答

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(滑块:UISlider)这两个完整的功能,并将其粘贴到您的视图控制器,并从viewDidLoad调用createMPSlider()它将工作。 如果你想要,你可以在顶部声明如果你想改变自定义滑块或使用它的实例。

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