【发布时间】:2021-08-21 09:26:22
【问题描述】:
SwiftUI中TextField的值为“0”时如何显示占位符?
【问题讨论】:
SwiftUI中TextField的值为“0”时如何显示占位符?
【问题讨论】:
这是使用自定义绑定的正确方法:
struct ContentView: View {
@State private var stringOfTextField: String = String()
var body: some View {
VStack(spacing: 20.0) {
TextField("Input your value Here!", text: Binding.init(get: { () -> String in
if (stringOfTextField != "0") { return stringOfTextField }
else { return "" } },
set: { (newValue) in stringOfTextField = newValue }))
.textFieldStyle(RoundedBorderTextFieldStyle())
HStack {
Button("set value to 1000") { stringOfTextField = "1000" }
Spacer()
Button("set value to 0") { stringOfTextField = "0" }
}
}
.padding()
}
}
【讨论】:
您可以使用ZStack 和TextField + Text 并根据当前文本应用opacity:
@State
var text = ""
var body: some View {
let isZero = text == "0"
ZStack(alignment: .leading) {
TextField("", text: $text)
.opacity(isZero ? 0 : 1)
Text("this is zero")
.opacity(isZero ? 1 : 0)
}
}
【讨论】:
我会做这样的事情。
请记住,这将阻止用户输入“0”作为第一个字符。
struct ContentView: View {
@State var text = ""
var body: some View {
TextField("Placeholder", text: $text)
.onChange(of: text, perform: { value in
if value == "0" {
text = ""
}
})
}
}
如果你的var 是@Binding,那么使用这个:
struct ContentView: View {
@Binding var text: String
var body: some View {
TextField("Placeholder", text: $text)
.onChange(of: $text.wrappedValue, perform: { value in
if value == "0" {
text = ""
}
})
}
}
【讨论】: