2015-06-04 15 views
8

Hızlı projemde bir kaydırıcı ve etiket var. Hikaye panosunda, denetleyicimi bu sayfa için denetleyici sınıfımın üzerine sürükledim ve bir çıkış ve bir eylem oluşturdum. Başka bir etiketi çıkış olarak kontrol ettim. Etiketi, kaydırıcının değerine göre güncellemeye çalışıyorum. Nerede yanlış gidiyorum bilmiyorum.Etiketin kaydırıcı değerine ayarlanması

Kodu:

@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" 
} 

ben log sliderValueChanged funciton görebileceğiniz çağrıldığını ve günlük değerini ancak etiketin metin güncellenmiyorsa yazdırıyor. Neyi yanlış yapıyorum?

Güncelleme:

Sadece benim giriş ekranında bir kaydırma nesne ve etiketi koymak ve etiket metni değiştirmek için aynı metodoloji ve kod kullanılır ve işe yaradı ama benim sekme çubuğu Kontrolörün içinde çalışmaz. Bu, sorunun ne olabileceğine ışık tutuyor mu?

+0

sliderVal IBOutlet olarak doğru şekilde bağlanmış mı? Ayrıca, bunu bir arka plan sürecinden değil, kaydırıcı değerini değiştiren kullanıcıdan çağırdığınızı varsayıyorum. – Chackle

+0

@Chackle Doğru şekilde bağlantılı olarak, tam olarak ne demek istiyorsunuz? Ben kontrol sliderVal etiketi kontrolör sınıfına sürükledim ve çıkış seçeneğini seçtim. Kullanıcı – user2363025

+0

değerini değiştirdiğinde, bu tam olarak ne demek istediğidir. Bir bakacağım ve sorunu burada kendim denemeyi deneyeceğim. Umarım – Chackle

cevap

1

Ana kuyrukta Bunun size yararlı umut

@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" 
    }) 
} 

bu

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

aynı sonucu döndürür. Değer günlüğünde değişiyor ancak – user2363025

+0

numaralı etikette değil, kontrol edin .... –

+0

belki de bir sekme çubuğu denetleyicisi olan bir projeyi kontrol edin. Sekmede ayrıca bir gezinme denetleyicisi vardır. Benim özel sekme çubuğu sınıfında standart dışında bir şey olması gerekir: class HomeController: UIViewController { – user2363025

5

Güncelleme kaydırıcı değerini deneyin.

+0

aynı sorun. Günlük güncellemeleri değil, etiket .. – user2363025

0

Programsal olarak yapmak isterseniz, bu bir yoldur. onun UIControlEvents için seç .allEvents:

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 
) 

Umut bu

0

Swift 3 :) yardımcı oldu.

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)") 
    } 
}