У меня 2 UITextField
и кастом UIButton
.Я проверяю, есть ли значение как в UITextField
, так и в enable
кнопке.Если пользователь возвращается и удаляет значение в любом из них, состояние кнопки возвращается к disabled
.Моя проблема с пользовательским интерфейсом.Когда включено - кнопка должна быть белой с фиолетовым цветом для заголовка, а когда отключена, она должна иметь чистый цвет (как цвет фона) и светло-серый для заголовка и цвета рамки.Это метод для этого UIButton
:
func authButton() {
layer.cornerRadius = 5
layer.borderWidth = 1
clipsToBounds = true
if state == .normal {
layer.borderColor = UIColor.white.cgColor
backgroundColor = UIColor.white
setTitleColor(Colors.purpleDarker, for: .normal)
}
else if state == .disabled {
layer.borderColor = UIColor.lightText.cgColor
backgroundColor = UIColor.gray
setTitleColor(.lightText, for: .disabled)
}
}
Работает нормально до тех пор, пока пользователь не удалит содержимое из текстового поля, тогда фон останется белым и заголовок будет «исчезать» (или его не будет видно),Это работает только в том случае, если пользователь нажимает кнопку «Готово» по ключевому слову, а затем изменяет состояние на «отключено».
Вот как я проверяю эти изменения в UITextField
(делегаты установлены для обоих текстовых полей):
func handleTextFields() {
emailTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
passwordTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
}
@objc func textFieldDidChange() {
print("11111")
guard let email = emailTextField.text, !email.isEmpty,
let pass = passwordTextField.text, !pass.isEmpty
else {
loginButton.isEnabled = false
return
}
loginButton.isEnabled = true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
switch textField {
case emailTextField:
passwordTextField.becomeFirstResponder()
case passwordTextField:
passwordTextField.resignFirstResponder()
default:
break
}
return true
}
Что я делаю не так?