2017-07-03 15 views
0

プログラムでUISliderを作成し、evertimeを実行するアクションを作成しました。スライダの値を変更します。アクションは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(slider:UISlider)をコピーしてView Controllerに貼り付け、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()) 
} 
} 
関連する問題