2017-07-03 67 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()) 
} 
}