2017-03-10 3 views
0

で作成UISliderでトリガーない:イベントは、私はストーリーボードを使用せずに作成したUISliderを持って、次のUICollectionViewCellサブクラスを持ってプログラム的スウィフト3

class ProductDetailPersonalLoanViewCell: UICollectionViewCell { 
    let valueSlider: UISlider = { 
     let mySlider = UISlider(frame:CGRect(x: 10, y: 100, width: 300, height: 20)) 
     mySlider.isUserInteractionEnabled = true 
     mySlider.minimumValue = 0 
     mySlider.maximumValue = 100 
     mySlider.isContinuous = true 
     mySlider.tintColor = UIColor.green 
     mySlider.addTarget(self, action: #selector(sliderValueDidChange(_:)), for: .valueChanged) 


     return mySlider 
    }() 

    override init(frame: CGRect){ 
     super.init(frame: frame) 

     setupViews() 
    } 

    func setupViews(){ 
     addSubview(valueSlider) 

     // ....... layout constraints 
    } 

    func sliderValueDidChange(_ sender:UISlider!){ 
     print("Slider value changed") 
     let roundedStepValue = round(sender.value/step) * step 
     sender.value = roundedStepValue 

     print("Slider step value \(Int(roundedStepValue))") 
    } 

} 

問題は、何らかの理由でイベントがときにトリガされていないことです私は親指を動かすので、私はUISliderの値を使用することができません。誰かがそれを修正する方法を知っていますか?

+0

'setupViews()'関数で 'valueSlider'を初期化しようとしましたか?すべての 'mySlider'コードをそこに移動し、それをサブビューとして追加するようにします。 – Ayazmon

答えて

1

あなたは計算値ブロックのあなたのvalueSlider外にターゲットを追加する必要があります。怠惰なプロパティに計算された値を変更し、私はよりよい解決策になると思います

let valueSlider: UISlider = { 
    let mySlider = UISlider(frame:CGRect(x: 10, y: 100, width: 300, height: 20)) 
    mySlider.isUserInteractionEnabled = true 
    mySlider.minimumValue = 0 
    mySlider.maximumValue = 100 
    mySlider.isContinuous = true 
    mySlider.tintColor = UIColor.green 

    return mySlider 
}() 

override init(frame: CGRect){ 
    super.init(frame: frame) 

    setupViews() 
    valueSlider.addTarget(self, action: #selector(sliderValueDidChange(_:)), for: .valueChanged) 
} 

または、:

lazy var valueSlider: UISlider = { 
    let mySlider = UISlider(frame:CGRect(x: 10, y: 100, width: 300, height: 20)) 
    mySlider.isUserInteractionEnabled = true 
    mySlider.minimumValue = 0 
    mySlider.maximumValue = 100 
    mySlider.isContinuous = true 
    mySlider.tintColor = UIColor.green 
    mySlider.addTarget(self, action: #selector(sliderValueDidChange(_:)), for: .valueChanged) 

    return mySlider 
}() 

override init(frame: CGRect){ 
    super.init(frame: frame) 

    setupViews() 

} 
関連する問題