web-dev-qa-db-fra.com

ajustement de l'étiquette à la valeur du curseur swift

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?

13
user2363025

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.

12
MMT

essaye ça

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

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)")
    }
}
0
Gary Mansted

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)
}
0
hiren

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 :)

0
Milap Jhumkhawala