SwiftUI在按钮上触发操作,而无需用户单击按钮

时间:2020-08-25 15:39:50

标签: button swiftui

我创建了一个非常简单的登录视图。 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中的任意位置单击内部,将触发按钮上的操作。

1 个答案:

答案 0 :(得分:0)

问题在于该部分周围有一个Form元素。我有一个使用Form的附件视图。该登录输入部分的视图在其中封闭。表单的行为似乎是,无论您在该表单中的何处单击,它都会触发其中包含的所有按钮动作。那真的不是我所期望的。