如何根据 SwiftUI 中的输入更改 TextField 状态?
How can you change TextField state based on input in SwiftUI?
我是 SwiftUI 的新手,所以我希望得到任何帮助!
我正在寻找构建一个 TextField
来显示基于 text
的验证的错误状态。
例如,如果 TextField
用于收集电子邮件,如果 text
不包含 @
,则显示错误。假设错误状态会将 TextField
的边框颜色更改为 Color.green
。
我正在考虑通过验证闭包来解决这个问题,但我仍然不确定如何更改 TextField
.
的实际视觉状态
我知道我们可以 - 我应该声明类似 @State var isError
的东西吗?
我也试过将 TextFieldStyle
作为 @State
,但这似乎是一个具有关联类型的协议,我无法绕过它:
类似于:
TextField("",
text: $text,
onEditingChanged: { _ in
self.style = CustomErrorStyle()
如果我能解释清楚,请告诉我,谢谢!
$text 的值会不断更新,因此您只需根据当前文本值更新TextField 格式即可。这是一个示例:
struct TextFieldTest: View {
@State var text: String = ""
var body: some View {
TextField("Placeholder", text: $text)
.padding()
.background(
RoundedRectangle(cornerRadius: 25.0)
.stroke(
text == "" ?
Color.gray :
textIsAppropriate() ?
Color.green :
Color.red
, lineWidth: 2.0)
)
}
func textIsAppropriate() -> Bool {
if text.contains("@") {
return true
}
return false
}
}
当然,如果您希望仅在用户点击按钮时更改格式,@Asperi 上面评论中的解决方案也适用!
我是 SwiftUI 的新手,所以我希望得到任何帮助!
我正在寻找构建一个 TextField
来显示基于 text
的验证的错误状态。
例如,如果 TextField
用于收集电子邮件,如果 text
不包含 @
,则显示错误。假设错误状态会将 TextField
的边框颜色更改为 Color.green
。
我正在考虑通过验证闭包来解决这个问题,但我仍然不确定如何更改 TextField
.
我知道我们可以 @State var isError
的东西吗?
我也试过将 TextFieldStyle
作为 @State
,但这似乎是一个具有关联类型的协议,我无法绕过它:
类似于:
TextField("",
text: $text,
onEditingChanged: { _ in
self.style = CustomErrorStyle()
如果我能解释清楚,请告诉我,谢谢!
$text 的值会不断更新,因此您只需根据当前文本值更新TextField 格式即可。这是一个示例:
struct TextFieldTest: View {
@State var text: String = ""
var body: some View {
TextField("Placeholder", text: $text)
.padding()
.background(
RoundedRectangle(cornerRadius: 25.0)
.stroke(
text == "" ?
Color.gray :
textIsAppropriate() ?
Color.green :
Color.red
, lineWidth: 2.0)
)
}
func textIsAppropriate() -> Bool {
if text.contains("@") {
return true
}
return false
}
}
当然,如果您希望仅在用户点击按钮时更改格式,@Asperi 上面评论中的解决方案也适用!