我正在学习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)
}
}
答案 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
}
}