【问题标题】:How can you change TextField state based on input in SwiftUI?如何根据 SwiftUI 中的输入更改 TextField 状态?
【发布时间】:2020-12-08 15:43:37
【问题描述】:

我对 SwiftUI 还是很陌生,所以我很想得到任何帮助!

我正在寻找基于text 的验证显示错误状态的TextField

例如,如果 TextField 用于收集电子邮件,则在 text 不包含 @ 时显示错误。假设错误状态会将TextField 的边框颜色更改为Color.green

我正在考虑通过验证闭包来解决此问题,但我仍然不确定如何更改 TextField 的实际视觉状态。

我知道我们可以can change border color based on editing state - 我应该声明类似@State var isError 的东西吗?

我也尝试将TextFieldStyle 保留为@State,但这似乎是一个具有关联类型的协议,我无法解决:

类似:

TextField("",
              text: $text,
              onEditingChanged: { _ in
                self.style = CustomErrorStyle()

如果我能澄清一下,请告诉我,谢谢!

【问题讨论】:

  • 你希望它如何显示错误状态
  • @Asperi 比如说边框颜色变为Color.green
  • 这是否回答了您的问题stackoverflow.com/a/64683684/12299030
  • @Asperi 是的,我想是的,谢谢!我正在考虑使用@State,就像我在问题中提到的那样。我试试看!

标签: ios swift swiftui textfield combine


【解决方案1】:

$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 评论中的解决方案也可以使用!

【讨论】:

  • 正是我想要的,尽管@Asperi 的回答也在教我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多