как отображать различные оповещения в зависимости от условия после нажатия кнопки в swiftui - PullRequest
1 голос
/ 06 ноября 2019

Я провел некоторое исследование, прежде чем опубликовать его здесь, но мне не удалось это исправить.

В представлении реестра я хочу, чтобы пользователь зарегистрировался.

Я создал связанный список и какПользователь регистрирует имя пользователя. Моя программа проверяет, занято ли уже имя пользователя.

Если оно занято, оно должно выдать предупреждение о том, что имя пользователя уже занято, когда пользователь нажимает кнопку регистрации.

если имя пользователя не занято, то должно появиться предупреждение о том, что регистрация прошла успешно

import SwiftUI

struct registerScreen: View {
    @State var username: String = ""
    @State var password : String = ""
    @State private var sucessfulRegister = false
    @State private var failedRegister = false
    var body: some View {
        VStack {
            TextField()
            SecureField()

            Button(action: {
                let userinfo = linkedList()
                if (userinfo.contains(value: self.username)){
                    // self.failedRegister = true
                    self.failedRegister.toggle()
                    // show alert that it failed
                } else {
                    userinfo.insert(value: user(username: self.username, password: self.password))
                    // show alert that it is successfull
                    self.sucessfulRegister.toggle()
                }
            })
             {
            Text("Register")
           .font(.headline)
           .foregroundColor(.white)
           .padding()
           .frame(width: 220, height: 60)
           .background(Color.green)
           .cornerRadius(15.0)
                }
        }
    }
}

1 Ответ

1 голос
/ 06 ноября 2019

можно сделать. Хотя вам не нужно отслеживать столько состояний, сколько вам нужно.

Во-первых, вам нужно только отслеживать, если они потерпели неудачу или нет. Таким образом, ваш failedRegister будет отслеживать, успешно ли зарегистрирован пользователь или нет. Это означает, что мы можем удалить successfulRegister.

Нам нужна переменная для отслеживания того, отображается предупреждение или нет, для этого мы будем использовать переменную showAlert

Поскольку у вас есть связанный список, который предоставляет информацию о пользователе, мы будем издеватьсяэто просто массив, содержащий пару имен пользователей.

Итак, вот упрощенная версия вашего кода, которая должна работать.

struct ContentView: View {

    var names: [String] = ["John", "Mike"]

    @State var username: String = ""
    @State var password : String = ""
    @State private var failedRegister = false

    // this value is used for tracking whether the alert should be shown
    @State private var showAlert = false

    var body: some View {
        VStack {
            TextField("Enter username", text: $username)

            Button(action: {
                // reset to false as this is the initial state
                self.failedRegister = false

                if (self.names.contains(self.username)){
                    self.failedRegister.toggle()
                } else {
                    // insert the value into the user info
                }
                self.showAlert.toggle()

            }) {
                Text("Register")
                    .font(.headline)
                    .foregroundColor(.white)
                    .padding()
                    .frame(width: 220, height: 60)
                    .background(Color.green)
                    .cornerRadius(15.0)
            }

        }.alert(isPresented: $showAlert) {
            // it would be nice to set failedRegister back to false in this function but you cannot modify state here.
            if self.failedRegister {
                return  Alert(title: Text("Failed to register"), message: Text("Unfortunately that username is taken"), dismissButton: .default(Text("OK")))
            } else {
                return  Alert(title: Text("Welcome"), message: Text("You have registered"), dismissButton: .default(Text("OK")))
            }
        }
    }
}

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