SwiftUI基于HttpResponse更改TextBox占位符

时间:2019-11-29 18:39:53

标签: swift swiftui

我正在学习SwiftUI,并且正在尝试实现忘记密码功能。默认情况下,文本字段会显示输入您的电子邮件,如果在我们的系统中找到了电子邮件,则会进行http呼叫,然后我希望Text PlaceHolder说“输入验证码” 。我已经有其他工作了。这是我的下面的代码。他们输入自己的电子邮件,然后HTTP调用处理其余部分,并根据是否找到电子邮件,在闭包中返回0或1。在下面的代码中,如果 foundEmail 为1,则文本占位符应更改为输入验证码

struct ForgotPassWordView: View {
    @State private var textResponse = ""

    var body: some View {
        ZStack
            {
                Color.black
                VStack {
                    NavigationView {

                        Form {
                            Section {
                                TextField("Enter Email", text: $textResponse)
                               // change to Verification Code if foundEmail is 1
                            }

                            Section {

                                    HStack {
                                        Spacer()
                                        Button(action: {
                                            if !self.textResponse.isEmpty  {


                                                _ = ForgotPasswordRequest(email: self.textResponse, section: 1) {(foundEmail) in
                                                    if foundEmail == 0 {
                                                        //  not found do nothing
                                                    } else if foundEmail == 1
                                                    {
                                                        //  found email change to : Enter Verification Code
                                                    }
                                                }
                                            }

                                        }) {
                                            Spacer()
                                            Text("Submit").fontWeight(.bold).frame(width: 70.0)
                                            Spacer()
                                        }

                                        Spacer()
                                    }


                            }
                        }
                        .navigationBarTitle(Text(""))

                    }
                    .padding(.horizontal, 15.0)

                    Text("Error Response").foregroundColor(.white)

                }
                .frame(height: 400.0)
        }.edgesIgnoringSafeArea(.all)
    }
}

1 个答案:

答案 0 :(得分:1)

您好,我想您可以使用两个TextField并使用一个布尔值来切换视图,因为文本字段的placeHolder未绑定,因此无法对其进行编辑...让我展示一下我在代码中的意思:

struct ContentView: View {
    @State var email: String = ""
    @State var verificationCode: String = ""
    @State var showCodeField: Bool = false

    var body: some View {
            NavigationView {
                VStack {
                    if (!showCodeField) {
                        TextField("Enter Valid Email", text: $email)
                    } else {
                        TextField("Enter Verification Code", text: $verificationCode)
                    }

                    Button(action: {
                        self.showCodeField.toggle()
                    }) {
                        Text("Verify Email")
                    }
                }
                .padding()
            }
    }
}

如果您有一个复杂的视图,也可以将它们提取为变量,并控制像这样的变量可见或不可见:

var someField: some View {
    ZStack(alignment: .center) {
      RoundedRectangle(cornerRadius: 8).foregroundColor(Color.white)
      TextField("Enter Email", text: $email)
      }
    }
}

在体内,您只能这样称呼

var body: some View {
    VStack {
       if(isVisible) {
          someField
       }
}

Email field showing

after clicking on the verify email button