Я создаю простой журнал в ВК. давайте проигнорируем проверку ввода как для имени пользователя, так и для пароля. Я просто хочу включить UIButton, когда UITextField имени пользователя и пароля не пуст. И всякий раз, когда какой-либо из них становится пустым, я хочу, чтобы кнопка была отключена.
@IBAction func typingUserName(_ sender: Any) {
usernameTxtfield.layer.shadowPath = UIBezierPath(rect: usernameTxtfield.bounds).cgPath
usernameTxtfield.layer.shadowRadius = 2
usernameTxtfield.layer.shadowOffset = .zero
usernameTxtfield.layer.shadowOpacity = 0.5
signInIcon.isEnabled = false
}
@IBAction func typingPassword(_ sender: Any) {
passwordTxtfield.layer.shadowPath = UIBezierPath(rect: passwordTxtfield.bounds).cgPath
passwordTxtfield.layer.shadowRadius = 2
passwordTxtfield.layer.shadowOffset = .zero
passwordTxtfield.layer.shadowOpacity = 0.5
signInIcon.isEnabled = false
}
@IBAction func usernameTxtFieldEditingChnged(_ sender: Any) {
usernameTxtfield.layer.shadowRadius = 0
usernameTxtfield.layer.shadowOffset = .zero
usernameTxtfield.layer.shadowOpacity = 0
}
@IBAction func passwordEditingChaned(_ sender: Any) {
passwordTxtfield.layer.shadowRadius = 0
passwordTxtfield.layer.shadowOffset = .zero
passwordTxtfield.layer.shadowOpacity = 0
signInIcon.isEnabled = true
}
@IBAction func signInClicked(_ sender: Any) {
performSegue(withIdentifier: "welcomeVC", sender: signInIcon)
}
Как видите, я включаю кнопку только после того, как текстовое поле пароля EditingChanged было запущено.





Вы можете наблюдать за событием .editingChanged.
passwordTxtfield.addTarget(self, action: #selector(passwordEditingChaned), for: .editingChanged)
usernameTxtfield.addTarget(self, action: #selector(usernameTxtFieldEditingChnged), for: .editingChanged)
А затем добавьте проверку в обоих методах:
signInIcon.isEnabled = passwordTxtfield.text?.isEmpty == false && usernameTxtfield.text?.isEmpty == false
Вы должны реализовать что-то вроде этого:
if usernameTxtfield.text != "" && passwordTxtfield.text != "" {
signInIcon.isEnabled = true
} else {
signInIcon.isEnabled = false
}
Вы добавляете этот фрагмент кода в действие каждого UITextField, и все готово.
Подключите выходы textFields и Button к классу ViewController.
@IBOutlet private weak var usernameTxtfield: UITextField!
@IBOutlet private weak var passwordTxtfield: UITextField!
@IBOutlet private weak var signInButton: UIButton!
затем напишите свою функцию настройки
private func setupTextFields() {
// write your TextFields custom setup ...
// also add delegate lines
usernameTxtfield.delegate = self
passwordTxtfield.delegate = self
}
ваша функция setupTextFields для просмотра DidLoad VC, а также установите кнопку isEnable = false
override func viewDidLoad() {
super.viewDidLoad()
setupTextFileds()
setSignInButton(isEnable: false)
}
а также написать func для получения текстовых полей.
private func getTextFields() -> [UITextField] {
return [usernameTxtfield, passwordTxtfield]
}
также нам нужно проверить, действительны ли они.
private func isInputsValid() -> Bool {
var isValid: Bool = true
let inputs: [UITextField] = getTextFields()
if let input = inputs.first(where: { $0.text?.count == 0 }) {
debugPrint("\(input) is not valid.")
isValid = false
}
return isValid
}
также добавьте функцию для установки кнопки
private func setSignInButton(isEnable: Bool) {
signInButton.isEnabled = isEnable
}
затем напишите функцию делегата TextField, чтобы понять, что входные данные меняются, и измените состояние кнопки.
extension ViewController: UITextFieldDelegate {
func textFieldDidChangeSelection(_ textField: UITextField) {
setSignInButton(isEnable: isInputsValid())
}
}
Я надеюсь, что это было полезно :)