Программно изменить значение ползунка и обновить метку

#ios #swift #uislider

#iOS #swift #uislider

Вопрос:

У меня есть 3 ползунка, как показано выше:

Ползунки

И когда «Минимальный наконечник» равен или больше «наконечника по умолчанию», я добавляю 1 к «наконечнику по умолчанию». И та же логика, что и для максимального наконечника по умолчанию.

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

 @IBOutlet weak var minLabel: UILabel!
@IBOutlet weak var defaultLabel: UILabel!
@IBOutlet weak var maxLabel: UILabel!


@IBOutlet weak var minSlider: UISlider!
@IBOutlet weak var defaultSlider: UISlider!
@IBOutlet weak var maxSlider: UISlider!

override func viewDidLoad() {
    super.viewDidLoad()

    minSlider.addTarget(self, action: #selector(SettingsViewController.minSliderValueChanged(_:)), forControlEvents: UIControlEvents.AllEvents)

    defaultSlider.addTarget(self, action: #selector(SettingsViewController.defaultSliderValueChanged(_:)), forControlEvents: UIControlEvents.AllEvents)


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func minSliderValueChanged(sender: UISlider) {
    let valueMin = Int(minSlider.value)
    let valueDefault = Int(defaultSlider.value)
    _ = Int(maxSlider.value)

    minLabel.text = "Min tip: (valueMin)%"
    if(valueMin >= valueDefault){
        defaultSlider.value = Float(valueMin 1)
    }

}

@IBAction func defaultSliderValueChanged(sender: UISlider) {
    let value = Int(defaultSlider.value)
    defaultLabel.text = "Default tip: (value)%"

}

@IBAction func maxSliderValueChanged(sender: UISlider) {
    let value = Int(maxSlider.value)
    maxLabel.text = "Max tip: (value)%"
}
  

Чего мне не хватает?

Ответ №1:

После defaultSlider.value = Float(valueMin 1) обновления текста метки, например, так:

 defaultLabel.text = "Default tip: (valueMin 1)%"
  

Ответ №2:

Значения ползунка варьируются от 0 (ползунок на левом конце) до 1 (ползунок на правом конце). При этом let valueMin = Int(minSlider.value) переменная valueMin может быть либо 0, либо 1. Я предполагаю, что это не то, что вы хотите на самом деле.

Возможно, это ближе к тому, что вы ищете?

 @IBAction func minSliderValueChanged(sender: UISlider) {
    let valueMin = minSlider.value
    let valueDefault = defaultSlider.value
    _ = Int(maxSlider.value)

    minLabel.text = "Min tip: (Int(valueMin*100))%"
    if(valueMin >= valueDefault){
        defaultSlider.value = valueMin
    }
}