2015-06-04 4 views
8

У меня есть слайдер и ярлык в моем стремительном проекте. На раскадровке я управлял перетаскиванием моего слайдера на мой класс контроллера для этой страницы и создал выход, а также действие. Я управляю перетаскиванием другой метки как розетки. Я пытаюсь обновить метку на основе значения ползунка. Я не знаю, где я ошибаюсь.регулировка метки для слайдера 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" 
} 

Я могу видеть в лог в Funciton sliderValueChanged вызывается и журнал печатает значение, но текст лейбла не обновляется. Что я делаю не так?

Update:

Я просто поставить объект слайдера и метку на моем экране входа в систему и использовать ту же методологию и код, чтобы изменить текст метки, и она работала, но это не будет работать внутри моего контроллера панели вкладок. Означает ли это прояснение того, что может быть проблемой?

+0

Является ли sliderVal правильно связанным как IBOutlet? Кроме того, я предполагаю, что вы вызываете это от пользователя, изменяющего значение ползунка, а не из фонового процесса? – Chackle

+0

@Chackle Правильно связанный, что именно вы имеете в виду? Я управляю перетаскиванием ярлыка sliderVal в свой класс контроллера и выбирал опцию выхода. Он вызывается, когда пользователь меняет значение – user2363025

+0

Именно это я и имел в виду. Я посмотрю и попытаюсь воспроизвести проблему самостоятельно. Надеюсь, я смогу помочь – Chackle

ответ

1

попробовать этот

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

тот же результат. Значение изменяется в журнале, но не на метке – user2363025

+0

ok i wii check .... –

+0

может быть зарегистрирован в проекте с контроллером панели вкладок. На вкладке также имеется контроллер навигации. Если в моем настраиваемом классе вкладки есть что-то, кроме стандартного: class HomeController: UIViewController { – user2363025

5

Обновить значение слайдера в главной очереди

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

Я надеюсь, что это полезно для вас.

+0

такой же выпуск. Обновлять журнал, но не ярлык. – user2363025

0

Если вы хотите сделать это программно, это один из способов.

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

Swift 3: Выберите .allEvents для его 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)") 
    } 
}