web-dev-qa-db-ja.com

スライダー値にラベルを調整するswift

Swiftプロジェクトにスライダーとラベルがあります。ストーリーボードで、スライダーをそのページのコントローラークラスにドラッグし、アウトレットとアクションを作成します。別のラベルをドラッグしますスライダーの値に基づいてラベルを更新しようとしていますが、どこが間違っているのかわかりません。

コード:

@IBOutlet weak var slider: UISlider!

@IBOutlet weak var sliderVal: UILabel!

@IBAction func sliderValueChanged(sender: UISlider) {
    var currentValue = Int(sender.value)
    println("Slider changing to \(currentValue) ?")
    sliderVal.text = "\(currentValue) Km"
} 

ログでは、sliderValueChanged関数が呼び出され、ログは値を出力していますが、ラベルのテキストは更新されていません。私は何を間違えていますか?

更新

ログイン画面にスライダーオブジェクトとラベルを配置し、同じ方法とコードを使用してラベルテキストを変更しただけで機能しましたが、Tab Bar Controller内では機能しません。これにより、問題の原因が明らかになりますか?

17
user2363025

メインキューのスライダー値を更新する

@IBAction func sliderValueChanged(sender: UISlider) {
    var currentValue = Int(sender.value)
    println("Slider changing to \(currentValue) ?")
    dispatch_async(dispatch_get_main_queue(){
        sliderVal.text = "\(currentValue) Km"
    })
}

これがあなたのお役に立てば幸いです。

14
MMT

これを試して

    var currentValue = Int(slider.value)
    println("Slider changing to \(currentValue) ?")
    startTime.text = "\(currentValue) Km"
2
Memon Irshad

クラスViewController:UIViewController {

@IBOutlet weak var imgView: UIImageView!
@IBOutlet weak var slideroutlet: UISlider!
@IBOutlet weak var lblValue: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

}

@IBAction func slider(_ sender: Any) {

    lblValue.text = String(slideroutlet.value)
    imgView.alpha = CGFloat(slideroutlet.value)
}
1
hiren

Swift 3:UIControlEventsに.allEventsを選択します。

slider.addTarget(self, action: #selector(ViewController.updateKmsLabel(sender:)), for: .allEvents)
// To use
func updateKmsLabel(sender: UISlider!) {
    let value = Int(sender.value)
    DispatchQueue.main.async {
        self.kmsLabel.text = "\(value)"
        print("Slider value = \(value)")
    }
}
0
Gary Mansted

プログラムで実行する場合、これは1つの方法です。

var slider: UISlider()
var label: UILabel()

func numberValueChanged(sender: UISlider) {
    slider.setValue(Float(Int(slider.value)), animated: true)
    updateLabels(slider.value)
}
fun updateLabels(nV: Float?) {
    if let v = nV {
        self.label.text = "\(v)"
    }
}

slider.addTarget (self,
                 action: #selector(numberValueChanged)
                 forControlEvents: UIControlEvents.ValueChanged
)

これが役に立てば幸いです:)

0