![](/img/trans.png)
[英]How do I convert UISlider value without changing current minimum and maximum slider value
[英]SwiftUI how do I give a Slider a minimum and maximum value and display its value in a Text?
import SwiftUI
struct ContentView : View {
var body: some View {
PasswordGeneratorSettings(settingsConfiguration: PasswordGeneratorSettings.Settings.init(passwordLength: 20))
}
}
struct PasswordGeneratorSettings : View {
@State var settingsConfiguration: Settings
struct Settings {
var passwordLength = UInt()
}
var body: some View {
NavigationView {
List {
Slider(value: $settingsConfiguration.passwordLength) { pressed in
Text("Password Length: \(settingsConfiguration.passwordLength)")
}
}.navigationBarTitle(Text("Settings"))
}
}
}
所以我正在制作一个密码生成器,我想从 slider 开始,最小长度为 1,最大长度为 512,label 显示它的值(作为整数),但这就是我所要做的表格视图(列表)左侧的更新 label 与右侧的 slider 但这甚至无法编译。
太久没有阅读:我正在尝试:
弄清楚如何使用 Slider 设置最小值和最大值
在表格视图单元格的左侧有一个 label 和滑块的值(作为整数),在右侧有 slider。
我想在没有 UIKit 的情况下完成所有这些,只需 SwiftUI (如果需要,还可以合并)。
这是您使用滑块的方式:
import SwiftUI
struct ContentView : View {
@State var length: Float = 20
var body: some View {
NavigationView {
List {
PasswordGeneratorSettings(length: $length)
}.navigationBarTitle(Text("Settings"))
}
}
}
struct PasswordGeneratorSettings : View {
@Binding var length: Float
var body: some View {
VStack(alignment: .leading) {
Slider(value: $length, in: 1...512, step: 1)
Text("Password Length: \(Int(length))")
}
}
}
您的代码无法编译,因为您需要在滑块值参数中使用 double。 您可以使用以下代码实现您的要求。 Slider 取三个参数值,from 和 through。 用简单的语言来说,from 是 minValue,through 是 maxValue,并且在任何给定时间“value”都将返回滑块中的当前值。
struct PasswordGeneratorSettings : View {
@State var settingsConfiguration: Settings
struct Settings {
var passwordLength: Double = 1.0
}
var body: some View {
NavigationView {
List {
HStack {
Text("Password Length: \(Int(settingsConfiguration.passwordLength))")
Slider(value: $settingsConfiguration.passwordLength, from: 1, through: 512)
}
.padding()
}.navigationBarTitle(Text("Settings"))
}
}
}
struct BoundsSlider : View {
let min: CGFloat
let max: CGFloat
@Binding var value: CGFloat
@State var lastValue: CGFloat
init (min: CGFloat, max: CGFloat, value: Binding<CGFloat>) {
self.min = min
self.max = max
_value = value
_lastValue = State(initialValue: value.wrappedValue)
}
var body: some View {
Slider(value: Binding.init(get: { () -> CGFloat in return value },
set: { (newValue) in if true { value = newValue; lastValue = newValue } }), in: min...max)
}
}
用法:
BoundsSlider(min: 0.7, max: 5, value: $speed)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.