SWIFTUI кнопка входа в систему аутентификации и go для нового просмотра - PullRequest
1 голос
/ 06 апреля 2020

Мне понадобилась легкая проверка TextField после ввода адреса электронной почты и пароля, следующего шага, нажимая кнопку sh, проверьте адрес электронной почты и пароль и go для следующего просмотра. Как это сделать? У меня есть некоторый код состояния var и Button:

struct ContentView: View {

    @State var email = "1"
    @State var password = "1"

    Button(action: {
              if self.email == "1" && self.password == "1"{
              print("Button tapped")
              NextMyView()
              }else {
           print("error")
                            }
                        }) {
                            Image(systemName: "heart.fill")
                                .foregroundColor(.red)
                        }

Но моя идея не работает, как я могу сделать эту проверку и после pu sh кнопка go до следующего просмотра.

1 Ответ

0 голосов
/ 06 апреля 2020

Вам понадобится NavigationView и NavigationLink для достижения того, что вы ищете.

NavigationView обернет все внутренние виды в контроллере навигации, а NavigationLink подобен специальной кнопке, которая запускает навигацию.

Пример:

struct ContentView: View {
  @State private var email: String = "root"
  @State private var password: String = "toor"

  @State private var isLoginValid: Bool = false
  @State private var shouldShowLoginAlert: Bool = false

  var body: some View {
    NavigationView {
      VStack(alignment: .center) {
        TextField("email", text: self.$email)
        TextField("password", text: self.$password)

        NavigationLink(destination: Text("Success"),
                       isActive: self.$isLoginValid) {
                /*
                 Here we put the content view of `NavigationLink`.
                 It could be any `View` even `Button` but in this
                 example we use a `Text` with `onTapGesture`.
                 */
                Text("Login")
                    .onTapGesture {
                    //determine login validity
                    let isLoginValid = self.email == "root" && self.password == "toor"

                    //trigger logic
                    if isLoginValid {
                      self.isLoginValid = true //trigger NavigationLink
                    }
                    else {
                      self.shouldShowLoginAlert = true //trigger Alert
                    }
                }
        }
      }
      .navigationBarTitle("Login Screen")
      .alert(isPresented: $shouldShowLoginAlert) {
        Alert(title: Text("Email/Password incorrect"))
      }
    }
  }
}

NavigationLink определяет:

  1. destination, который переходит к простому Text представлению
    • В вашем случае вы должны изменить его на NextMyView()
  2. isActive, привязанное к логическому значению loginSuccess, который при обновлении до true должен повторно визуализировать представление и вызвать автоматический запуск NavigationLink
  3. Представление содержимого - это простое Text с onTapGesture, в котором мы можем реализовать успех / обработка ошибок.
    • В вашем случае вы можете изменить Text на Image(systemName: "heart.fill")

PS: В качестве дополнительного я включил лог c для запуска и показать предупреждение при сбое входа в систему.
Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...