我有一个简单的登录视图,包括两个文本字段、一个指向注册视图的导航链接、一个指向忘记密码视图的导航链接和一个登录按钮。我可以选择任一文本字段并输入文本,但是在将文本输入任一文本字段后尝试按下视图上的任何其他控件(文本字段或导航链接),只会冻结应用程序,控制台窗口中没有记录任何错误消息。
我在与旧版本 Xcode / swift 相关的其他帖子中看到,这种类型的行为可以通过在主线程上执行的连续循环来解释,但是我看不出这如何适用于我的情况?
struct LoginForm : View {
@Binding var emailAddress : String
@Binding var password: String
var body: some View{
VStack(alignment: .leading){
Text("Email address")
.foregroundColor(Color.black)
.bold()
.font(.subheadline)
.padding(.leading, 12)
TextField("Email",text:$emailAddress)
.padding()
Text("Password")
.foregroundColor(Color.black)
.bold()
.font(.subheadline)
.padding(.leading, 12)
SecureField("Password",text:$password)
.padding()
}
}
}
struct LoginRootView : View {
@State private var emailAddress: String = ""
@State private var password: String = ""
@EnvironmentObject var authData: AuthData
var body: some View {
Group{
if self.authData.authenticationDidSucceed {
OnBoardRootView()
}else{
NavigationView{
ZStack{
Image("LoginBG")
.resizable()
.aspectRatio( contentMode: .fill)
.edgesIgnoringSafeArea(.all)
.opacity(0.5)
VStack(alignment: .leading){
Text( "Log into")
.font(.largeTitle)
.bold()
Text( "your account")
.font(.largeTitle)
.bold()
LoginForm(emailAddress:$emailAddress, password:$password)
.padding(.bottom, 8)
.padding(.top, 22)
//Login button
if emailAddress != "" && password != ""{
LoginButton(email:self.emailAddress, password: self.password)
.padding(.vertical, 20.0)
.background(Color.blue, cornerRadius: 30.0)
.padding(.horizontal, 8)
}else{
LoginButton(email:self.emailAddress, password: self.password)
.padding(.vertical, 20.0)
.background(Color.gray, cornerRadius: 30.0)
.padding(.horizontal, 8)
.disabled(emailAddress == "" || password == "")
}
//Forgot password link
HStack{
Text( "Forgot password?")
NavigationLink(destination: ForgotPasswordRootView()) {
Text( "Get help signing in")
.bold()
}
}.padding(.top, 20)
Spacer()
// Registration Link
HStack{
Text( "Don't have an account? ")
NavigationLink(destination: RegistrationRootView()) {
Text( "Sign Up")
.bold()
}
}
.padding(.bottom, 120)
}.padding(.all)
.padding(.top, 160)
// end of vstack
}
//end of zstack
}
//end of navigation view
}
//end of authentication if statement
}
//end of group
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1070 次 |
最近记录: |