SwiftUI:使用 Stepper 输入数字

SwiftUI有两种让用户输入数字的方法,而我们将在这里使用的一种是Stepper:一个简单的 - 和 + 按钮,可以点击以选择一个精确的数字。另一种是Slider,我们稍后将使用它——它使我们可以从一系列值中进行选择,但不太精确。

步进器Stepper非常聪明,可以处理您喜欢的任何类型的数字类型,您可以将它们绑定到IntDouble和更多类型,它将自动适应。例如,我们可以创建如下属性:

@State private var sleepAmount = 8.0

然后,我们可以将其绑定到Stepper,以使其显示当前值,如下所示:

Stepper(value: $sleepAmount) {
    Text("\(sleepAmount) hours")
}

该代码运行时,您会看到8.000000 hours,然后可以点击-和+向下移至7、6、5,然后变为负数,或者向上移至9、10、11,依此类推。

默认情况下,步进器仅受其存储范围的限制。在此示例中,我们使用Double,这意味着滑块的最大值将为1.7976931348623157e + 308。这是科学的表示法,但是它的意思是“ 1.79769乘以10的308的幂” –或更简单地说,是非常大的一个数字。

现在,作为两个孩子的父亲,我无法告诉您我有多爱睡觉,可即使如此我却不能睡那么多。幸运的是,Stepper让我们通过提供范围内的值来限制我们要接受的值,如下所示:

Stepper(value: $sleepAmount, in: 4...12) {
    Text("\(sleepAmount) hours")
}

有了这一更改,步进器将从8开始,然后允许用户在4到12(含)之间移动,但不能超过。这样一来,我们可以控制睡眠范围,以使用户无法尝试24小时睡眠,但也可以让我们拒绝不可能的值——例如,您不能睡眠 -1 小时。

步进器有第三个有用的参数,一个是步进值step:每次-或+将值移动多少。同样,它可以是任何类型的数字,但需要匹配用于绑定的类型。因此,如果要绑定到整数,则不能将Double用作步进值。

在这种情况下,我们可以说用户可以选择4到12之间的任何睡眠值,以15分钟为增量移动:

Stepper(value: $sleepAmount, in: 4...12, step: 0.25) {
    Text("\(sleepAmount) hours")
}

这开始看起来有点用,我们拥有合理范围的精确值,合理的步长增量,并且用户每次都能准确看到他们选择的内容。

不过,在继续之前,我们先修复一下该文本:它现在显示为8.000000,虽然准确,但有点太准确了。以前,我们使用如下字符串内插说明符:

Text("\(sleepAmount, specifier: "%.2f") hours")

我们可以在这里使用它,但看起来很奇怪:“ 8.00 hours”似乎过于冰冷。这是“%g”说明符在其中有用的一个很好的示例,因为它会自动从数字末尾删除不重要的零。因此,它将显示8、8.25、8.5、8.75、9,依此类推,这对于用户而言更自然。

Text("\(sleepAmount, specifier: "%.2g") hours")

译自 Entering numbers with Stepper

Previous: 里程碑:项目 1 - 3 Hacking with iOS: SwiftUI Edition Next: 使用 DatePicker 选择日期和时间

赏我一个赞吧~~~

你可能感兴趣的:(SwiftUI:使用 Stepper 输入数字)