J'ai un slider et une étiquette dans mon projet Swift. Sur le story-board, j'ai fait glisser mon curseur sur ma classe de contrôleur pour cette page et créé une prise ainsi qu'une action. Je contrôle traîné une autre étiquette en tant que point de vente. J'essaie de mettre à jour l'étiquette en fonction de la valeur du curseur. Je ne sais pas où je vais mal.
Code:
@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"
}
Je peux voir dans le journal que la fonction sliderValueChanged est appelée et que le journal imprime la valeur, mais que le texte de l'étiquette ne se met pas à jour. Qu'est-ce que je fais mal?
Mettre à jour :
Je viens de mettre un objet curseur et une étiquette sur mon écran de connexion et j'ai utilisé la même méthodologie et le même code pour changer le texte de l'étiquette. Cela a fonctionné, mais cela ne fonctionnera pas dans le contrôleur de la barre de tabulation. Est-ce que cela nous éclaire sur le problème?
Mettre à jour la valeur du curseur dans la file d'attente 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"
})
}
J'espère que cela vous aide.
essaye ça
var currentValue = Int(slider.value)
println("Slider changing to \(currentValue) ?")
startTime.text = "\(currentValue) Km"
Swift 3: Sélectionnez .allEvents pour ses événements 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)")
}
}
class 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)
}
Si vous voulez le faire par programme, c'est une façon.
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
)
J'espère que c'était utile :)