Отключить кнопку от перехода к следующему контроллеру просмотра, если текстовые поля не заполнены - PullRequest
1 голос
/ 13 июля 2020

У меня проблема с пустыми текстовыми полями, и как только я нажимаю кнопку, она переходит к следующему контроллеру просмотра. Я хочу отключить кнопку, пока не будут заполнены все текстовые поля.

@IBAction func buttontapped(_ sender: Any, forEvent event: UIEvent) {
        let loginFunc = Login()
        loginFunc.login(First_Nm: First_Nm.text!, Pw: Pw.text!, Last_Name: Last_Name.text!, Email: Email.text!) { jsonString in
            let response = jsonString
            print(response)
            if response.range(of: "failure") == nil {
                DispatchQueue.main.async {
                    self.performSegue(withIdentifier: "goToHomeVC", sender: nil)
                }
        
            }
}

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Добавьте проверку UITextField s, чтобы убедиться, что свойство text s isEmpty истинно, прежде чем переходить к performSegue.

@IBAction func buttontapped(_ sender: Any, forEvent event: UIEvent) {
    if First_Nm.text!.isEmpty || Last_Name.text!.isEmpty || Email.text!.isEmpty {
        print("Incomplete, show an alert for user's attention!")
        return
    }
    //...
}

Надстройка: Кроме того, следуйте стандартному соглашению об именах для ваших свойств. Например: вместо First_Nm используйте firstNameTextField.

0 голосов
/ 13 июля 2020

Если вы хотите добиться отключения и включения с помощью кнопки на основе ввода textField, вы можете реализовать UITextFieldDelegate - textFieldDidChange

Код будет выглядеть так:

@IBOutlet weak var loginButton: UIButton!
@IBOutlet weak var firstNameTextField: UITextField!
@IBOutlet weak var lastNameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
    
override func viewDidLoad() {
    super.viewDidLoad()
        
    firstNameTextField.delegate = self
    lastNameTextField.delegate = self
    passwordTextField.delegate = self
    emailTextField.delegate = self
}

И в нижней части файла ViewController вы можете создать расширение для UITextFieldDelegate

extension YourViewController: UITextFieldDelegate {
    func textFieldDidChangeSelection(_ textField: UITextField) {
        checkButtonState()
    }
    
    func checkButtonState() {
        var validFirstName = false
        var validLastName = false
        var validPassword = false
        var validEmail = false
        
        if firstNameTextField.text != "" {
            validFirstName = true
        }
        if lastNameTextField.text != "" {
            validLastName = true
        }
        if passwordTextField.text != "" {
            validPassword = true
        }
        if emailTextField.text != "" {
            validEmail = true
        }
        if validFirstName && validLastName && validPassword && validEmail {
            loginButton.isEnabled = true
        } else {
            loginButton.isEnabled = false
        }
    }
}

Тогда я бы также рекомендовал еще одну проверку при нажатии кнопки, аналогично приведенному выше ответу, но я думаю, что это может быть более обширная проверка по электронной почте и паролю. (Логин может быть не так важен, но во время регистрации вы можете захотеть подтвердить пароль и адрес электронной почты, а не пустой)

Вы можете создать свои собственные правила, но обычно это что-то вроде

Подтвердите пароль: • Требуется 6-8 символов

if string.count < 6 {
    print("Password must be more than 6 characters")
}

• Может потребоваться одна заглавная буква или одна цифра

Подтвердить адрес электронной почты: • Должен содержать «@»

if !string.contains("@") {
    print("probably not a valid email")
}

Вы можете проверить строки в текстовом поле, чтобы увидеть, соответствуют ли они критериям, если пользователю не возвращается логин или ошибка регистрации. Надеюсь, это поможет вам двигаться в правильном направлении

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