【问题标题】:Show Placeholder if the value equal to "0" in SwiftUI如果 SwiftUI 中的值等于“0”,则显示占位符
【发布时间】:2021-08-21 09:26:22
【问题描述】:

SwiftUI中TextField的值为“0”时如何显示占位符?

【问题讨论】:

    标签: swift swiftui textfield


    【解决方案1】:

    这是使用自定义绑定的正确方法:

    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()
      
        }
        
    }
    

    【讨论】:

    • 感谢您的回答。它实际上工作得很好!
    【解决方案2】:

    您可以使用ZStackTextField + 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)
        }
    }
    

    【讨论】:

      【解决方案3】:

      我会做这样的事情。

      请记住,这将阻止用户输入“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 = ""
                      }
                  })
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-02
        • 2012-05-16
        • 2015-10-31
        • 1970-01-01
        • 2014-08-21
        • 2016-07-01
        • 2020-12-05
        相关资源
        最近更新 更多