根据UISlider值更改UILabel的case语句

时间:2016-03-13 02:04:40

标签: ios swift switch-statement uilabel uislider

所以,直接进入它。我希望根据UISlider的位置更改标签的值。如果滑块位于位置1且未触及,则标签应显示"常规",在值2处应显示"大豆"和价值3,"杏仁"。

如果您还没有猜到,那就是选择牛奶。

理想情况下,我希望使用开关/外壳。滑块的最小值为1,表示普通牛奶。该应用程序的目标是使用云线来保存订单信息,因此我对哪个是符合此未来要求的最佳解决方案持开放态度。

谢谢!

目前....

@IBOutlet weak var sugarValue: UILabel!

@IBOutlet weak var sugarStepper: UIStepper!

@IBOutlet weak var milkChoice: UILabel!

@IBOutlet weak var milkChoiceSlider: UISlider!

@IBAction func sugarChange(sender: UIStepper) {
    sugarValue.text = Double(sugarStepper.value).description
}

@IBAction func milkChoiceChange(sender: UISlider) {
    milkChoice.text = String(milkChoiceSlider.value)
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

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

我知道当前的设置不会显示标签中的文字,我试图让它首先显示1,2,3值,但无济于事。

2 个答案:

答案 0 :(得分:1)

这是一个代码片段......如您所见,您可以使用一组值,在这种情况下,您不需要“case”:)

import UIKit

class ViewController: UIViewController {

    @IBOutlet var milkChoiceLabel: UILabel!
    @IBOutlet var milkChoiceSlider: UISlider!
    @IBOutlet var sugarValue: UILabel!

    var labelValues: [String] = ["Regular", "Soy", "Almond"]


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

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

    @IBAction func sliderValueChanged(sender: UISlider) {

        sender.value = roundf(sender.value)

        let value = Int(sender.value)

        sugarValue.text = value.description

//        switch (sender.value) {
//        case 1:
//            milkChoiceLabel.text = labelValues[0]
//            break
//        case 2:
//            milkChoiceLabel.text = labelValues[1]
//            break
//        case 3:
//            milkChoiceLabel.text = labelValues[2]
//            break
//        default:
//            break
//        }

        // or better ...

        milkChoiceLabel.text = labelValues[value - 1];

    }

}

答案 1 :(得分:0)

这里真正的问题是你将UISlider误用为三态开关。滑块连续;它不是开关。如果你想要一个三态开关,你应该使用一个三态开关,即一个UISegmentedControl。