我创建了一个非常简单的登录视图。 using Maven Shade plugin for creating a "uber jar"
我观察到一个非常奇怪的行为。当我在文本框内单击时,该单击最终触发“登录”按钮上的“操作”。以下是负责设置视图这一部分的代码。
var body: some View{
ZStack{
VStack(alignment: .center){
TextField("Login", text: $model.userName).padding().border(/*@START_MENU_TOKEN@*/Color.black/*@END_MENU_TOKEN@*/, width: 1).cornerRadius(2.0)
SecureField("Password",text:$model.password).padding().border(Color.black, width:1).cornerRadius(2.0)
Toggle(isOn:$model.rememberMe){
Text("Remember me")
}
if (model.loginFailed){
Text(model.errorMessage!).font(.footnote).foregroundColor(.red).animation(.easeIn)
}
VStack{
Button(action: signIn) {
Text("Login")
}
Button(action:recoverPassword){
Text("Forgot Password?")
}
}
}.padding().zIndex(100).disabled(model.loginInProgress)
LoginInProgressIndicator().animation(.easeIn).zIndex(model.loginInProgress ? 200: 0).opacity(model.loginInProgress ? 0.9 : 0)
}
}
按钮上的某些时间“动作”会在两个文本框中的任何一个上单击时触发。有时我在尝试单击文本框内的几次尝试后触发。底线是无需单击按钮即可触发“登录”按钮上的“操作”。
设置代码的方式是否有问题。或者,当按钮属于组或某物时,需要做一些特殊的事情来处理按钮上的“动作”。
任何帮助将不胜感激。
更新: 我添加了一些旧式诊断程序,以检查视图中两个按钮的“操作”行为。原来,文本框内的时钟触发了两个按钮上的操作。打印消息总是成对出现。
更多更新 这个问题更加普遍。在顶层VStack中的任意位置单击内部,将触发按钮上的操作。
答案 0 :(得分:0)
问题在于该部分周围有一个Form元素。我有一个使用Form的附件视图。该登录输入部分的视图在其中封闭。表单的行为似乎是,无论您在该表单中的何处单击,它都会触发其中包含的所有按钮动作。那真的不是我所期望的。