Я установил 4 UITextFields и один UIButton. Это работает как страница регистрации, где пользователь предоставляет такие данные, как имя пользователя, адрес электронной почты, пароль и т. д. Таким образом, только и только там, где все текстовые поля пользовательского интерфейса НЕ пусты, кнопка регистрации будет включена, чтобы пользователь мог нажать внутри и перейти к следующему UIView. Все работает нормально, но я замечаю небольшой баг, который бьет по моему последнему нерву XD.
Если пользователь заполнит все поля UItextField всей необходимой информацией, но по какой-то причине вернется в одно из них, пока поле не станет пустым, а затем нажмет кнопку регистрации, регистрация будет успешной, даже если поле было пустым. Пожалуйста, я почти неделю пытался понять это.
Как я настроил UIbotton:
private let registerButton : UIButton = {
let button = UIButton(type: .system)
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle("Registrar", for: .normal)
button.backgroundColor = UIColor.blue
button.layer.cornerRadius = 5
button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 14)
button.setTitleColor(.black, for: .normal)
button.addTarget(self, action: #selector(handleSignUp), for: .touchUpInside)
button.isEnabled = true
return button
}()
Код блока, отвечающий за проверку того, все ли поля уже заполнены пользователем.
@objc private func handleSignUp () {
let userName = userNameTexField.text
let email = emailTextField.text
let password = passwordTextField.text
let confirmPassword = confirmPasswordField.text
let birthDate = birthDateTextField.text
if userName?.isEmpty ?? true && email?.isEmpty ?? true && password?.isEmpty ?? true && confirmPassword?.isEmpty ?? true && birthDate?.isEmpty ?? true {
let alert = UIAlertController(title: nil, message: "Youmust fill all the fields with all the required infotmation to signup", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alert.addAction(okAction)
present(alert, animated: true, completion: nil)
}else {
emailTextField.isUserInteractionEnabled = false
passwordTextField.isUserInteractionEnabled = false
confirmPasswordField.isUserInteractionEnabled = false
birthDateTextField.isUserInteractionEnabled = false
performSegue(withIdentifier: "goToHome", sender: nil)
print("LogIn succesful!")
print (userAge)
}
}
Я ожидаю исправить эту ошибку, поэтому, когда пользователь по какой-то причине стирает одно из полей, снова появляется предупреждение, предлагающее пользователю заполнить все поля для регистрации.





Вы должны использовать || в своем if вместо &&, потому что вы хотите показывать предупреждение, когда хотя бы одно из этих полей пусто.
Вы требуете, чтобы все поля были пустыми, чтобы вызвать оповещение. Что вам нужно, так это знать, что один из них пуст. Попробуйте заменить && на ||.
if userName?.isEmpty ?? true || email?.isEmpty ?? true || password?.isEmpty ?? true || confirmPassword?.isEmpty ?? true || birthDate?.isEmpty ?? true
Вам нужно использовать оператор или вместо и, потому что у вас есть проверка для любого пустого текстового поля:
@objc private func handleSignUp () {
if textField1.text!.isEmpty || textField2.text!.isEmpty || textField3.text!.isEmpty || textField4.text!.isEmpty || textField5.text!.isEmpty {
let alert = UIAlertController(title: nil, message: "Youmust fill all the fields with all the required infotmation to signup", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alert.addAction(okAction)
present(alert, animated: true, completion: nil)
}else {
textField2.isUserInteractionEnabled = false
textField3.isUserInteractionEnabled = false
textField4.isUserInteractionEnabled = false
textField5.isUserInteractionEnabled = false
performSegue(withIdentifier: "goToHome", sender: nil)
print("LogIn succesful!")
print ("userAge")
}
}
ОМГ спасибо большое!!!! это работает нормально. И большое спасибо другим людям, которые нашли время, чтобы ответить. Очень благодарны!