2015-06-04 13 views
8

Ho un cursore e un'etichetta nel mio progetto rapido. Nello storyboard, ho controllato il mio slider trascinato sulla mia classe controller per quella pagina e creato uno sbocco e anche un'azione. Ho controllato trascinato un'altra etichetta come presa. Sto cercando di aggiornare l'etichetta in base al valore del cursore. Non so dove sbaglio.regolazione etichetta su slider value swift

Codice:

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

posso vedere nel log del funciton sliderValueChanged è chiamata e il registro è la stampa del valore, ma il testo dell'etichetta non viene aggiornato. Che cosa sto facendo di sbagliato?

Aggiornamento:

ho appena messo un oggetto cursore e l'etichetta sul mio schermo di login e usato la stessa metodologia e il codice per modificare il testo dell'etichetta e ha funzionato, ma non funziona dentro il mio controller barra delle schede. Questo fa luce su quale potrebbe essere il problema?

+0

È sliderVal collegato correttamente come IBOutlet? Suppongo anche che tu stia chiamando questo utente modificando il valore del cursore e non da un processo in background? – Chackle

+0

@Chackle Collegato correttamente, cosa intendi esattamente? Ho controllato trascinato l'etichetta sliderVal sulla mia classe controller e selezionato l'opzione outlet. Viene chiamato quando l'utente cambia il valore – user2363025

+0

Questo è esattamente ciò che intendevo. Dare un'occhiata e provare a replicare il problema io stesso qui. Spero di poter aiutare il cursore – Chackle

risposta

1

provare questo

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

stesso risultato. Il valore sta cambiando nel log ma non sull'etichetta – user2363025

+0

ok wii check .... –

+0

forse verificare in un progetto che ha un controller barra delle linguette. La scheda ha anche un controller di navigazione. Dovrebbe esserci qualcosa nella mia classe di tabulazione personalizzata oltre allo standard: classe HomeController: UIViewController { – user2363025

5

Aggiornare il valore del cursore nella coda principale

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

Spero che questo sia utile a voi.

+0

stesso problema. Registra gli aggiornamenti ma non l'etichetta .. – user2363025

0

Se si desidera farlo a livello di codice, questo è un modo.

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 
) 

Spero che questo è stato utile :)

0

Swift 3: Selezionare le .allEvents per i suoi UIControlEvents.

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