Swift

时间:2015-09-23 18:53:43

标签: ios xcode swift slider

当用户拖动旋钮时,如何将自定义范围滑块的值显示给用户?

上下文

我是iOS开发人员的新手,所以如果我遗漏了一些明显的东西,请原谅我。我正在创建一个自定义范围滑块,现在我正处于用户拖动旋钮时我想在UI中向用户显示滑块值的位置。

对于后台,我已经完成this tutorial并且现在正尝试获取控制台中打印的值并将它们转换为可读字符串以显示给用户。通过此功能打印值:

func rangeSliderValueChanged(rangeSlider: RangeSlider) {        
    print("Range slider value changed: (\(rangeSlider.lowerValue) \(rangeSlider.upperValue))")
}

viewDidLoad中的ViewController中调用了哪个:

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(rangeSlider)

    rangeSlider.addTarget(self, action: "rangeSliderValueChanged:", forControlEvents: .ValueChanged)        
}

ValueChanged覆盖了continueTrackingWithTouch中的RangeSlider.swift

override func continueTrackingWithTouch(touch: UITouch,
    withEvent event: UIEvent?) -> Bool {
    // .. other stuff

    self.sendActionsForControlEvents(UIControlEvents.ValueChanged)
    return true
}

我的尝试

此时我认为解决此问题的方法是在视图中添加文本字段,然后使用滑块中的值更新文本字段。

我在viewDidLoad中创建了一个文本字段:

var lowNumber: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200.00, height: 40.00))

override func viewDidLoad() {

    lowNumber.backgroundColor = UIColor.redColor()
    lowNumber.text = "some string"
    lowNumber.borderStyle = UITextBorderStyle.Line

    self.view.addSubview(lowNumber)

    // .. more stuff
}

然后我尝试更改rangeSliderValueChanged函数中的文本字段字符串:

func rangeSliderValueChanged(rangeSlider: RangeSlider) {
    lowNumber.text = rangeSlider.lowerValue
}

错误

此时我遇到一个错误,指出:

Cannot assign a value of type 'Double' to a value of type 'String?'

Double用于RangeSlider类,例如:

class RangeSlider: UIControl {
    // .. stuff

    var lowerValue: Double = 0.2 {
        didSet {
            updateLayerFrames()
        }
    }

    // .. more stuff
}

这就是我被困住的地方,我在将双精度转换为字符串时所做的谷歌搜索让我想知道如何将这些解决方案应用到我的案例中。更基本的是,我想知道我是否正在以正确的方式解决问题。

问题

如何解决从滑块向用户显示值的问题?我是否需要使用与UITextField不同的图层类型?我是否正确处理了问题,或者您是否会推荐其他方法?

1 个答案:

答案 0 :(得分:1)

您需要将号码转换为String。例如:

lowNumber.text = "\(rangeSlider.lowerValue)"