![](/img/trans.png)
[英]Why doesn't setting the value property of this UISlider update its position?
[英]Swift - UISlider doesn't change its value
我以編程方式創建了一個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)
}
}
我移動了一些代碼,並刪除了函數中的@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())
}
}
您可以使用此代碼,我已經對其進行了測試,並且可以正常工作
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()它將起作用。 如果需要,可以在頂部聲明是否要更改自定義滑塊或使用它的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.