我以编程方式创建了一个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)
}
}
答案 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()它将起作用。 如果需要,可以在顶部声明如果要更改自定义滑块或使用它的实例。