如何在SwiftUI中通过单击按钮(而不是通过使用NavigationLink)检查TextField的有效性?

时间:2019-07-29 07:42:59

标签: ios swift swiftui

在进入下一个屏幕之前,我想验证我的TextField“用户名”和TextField“密码”是否为空。在SwiftUI中可以吗?

示例我在Swift中执行此操作:-

@IBAction func btnSignInTapped(_ sender: UIButton) {
    if (String.isStringEmpty(aString: getString(anything: tfUserName.text))) {
        //Error message
        return
    } else if (String.isStringEmpty(aString: getString(anything: tfPassword.text))) {
        //Error message
        return
    } else {
        //Push screen
    }
}

类似地,我该如何在SwiftUI中做到这一点?

1 个答案:

答案 0 :(得分:1)

一旦您接受了SwiftUI的“声明式”性质,就很容易做到。这是一个Swift游乐场,展示了一种非常准系统的方法:

import SwiftUI
import PlaygroundSupport


struct ContentView : View {

    @State private var email: String = ""
    @State private var password: String = ""

    private var validated: Bool {
        !email.isEmpty && !password.isEmpty
    }

    var body: some View {
        Group {
            TextField("email", text: $email)
            TextField("password", text: $password)

            if validated {
                Button("Login") {
                    print("Logging in")
                }
            }
        }
    }
}

PlaygroundPage.current.liveView = UIHostingController(rootView: ContentView())

基本上,您不在TextField上工作,而是在@State上工作,并指示UI仅在满足条件时才显示按钮。

当然,如果验证比我们这里要复杂的多,则可能需要使用View-Model对象。