Отключение кнопки, когда текстовое поле пусто, ожидайте каких-либо изменений в другом текстовом поле - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу отключить кнопку входа, если текстовое поле электронной почты или пароль пусто, и включить его снова, когда оба поля заполнены, поэтому я использую следующий код:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if txtEmail.text != "" , txtPassword.text != "" {
        btnLogInOutlet.isEnabled = true
    }else if txtEmail.text! == "" || txtPassword.text! == "" {
        btnLogInOutlet.isEnabled = false
    }
    return true
}

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

enter image description here

У меня вопрос, как снова отключить кнопку сразу после того, как я удалю то, что я ввожу в любое текстовое поле, прежде чем перейти к другому ??

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {


    if txtEmail.text != "" && txtPassword.text != "" {
        btnlogin.isEnabled = true
    }else if txtEmail.text! == "" || txtPassword.text! == "" {
        btnlogin.isEnabled = false

    }
    return true
}


func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {

    if txtEmail.text != "" && txtPassword.text != "" {
        btnlogin.isEnabled = true
    }else if txtEmail.text! == "" || txtPassword.text! == "" {
        btnlogin.isEnabled = false

    }
    return true

}

Вы просто должны поместить тот же код в textFieldShouldEndEditing, и он будет работать:)

0 голосов
/ 06 сентября 2018

попробуйте это ... изначально отключить кнопку входа в систему ..

override func viewDidLoad() {
        super.viewDidLoad()
        loginbttn.isEnabled = false;
        textfield1.addTarget(self, action:  #selector(textFieldDidChange(_:)),  for:.editingChanged )
        textfield2.addTarget(self, action:  #selector(textFieldDidChange(_:)),  for:.editingChanged )

    }

 @objc func textFieldDidChange(_ sender: UITextField) {
        if textfield1.text == "" || textfield2.text == "" {
            loginbttn.isEnabled = false;
        }else{
             loginbttn.isEnabled = true;
        }
    }

Удачного кодирования:)

0 голосов
/ 06 сентября 2018

Вы получаете текстовое значение из своего текстового поля перед возвратом истины от вашего делегата - это означает, что оно имеет старое значение, до изменения.

Вместо использования shouldChangeCharactersIn метода делегата используйте действие (вы также можете подключить его с помощью раскадровок):

txtEmail.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: .editingChanged)
txtPassword.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: .editingChanged)

Теперь в методе textFieldDidChange(textField: UITextField) вы можете скопировать и вставить свою реализацию (немного улучшенную здесь):

@objc func textFieldDidChange(textField: UITextField) {
   btnLogInOutlet.isEnabled = !txtEmail.text.isEmpty && !txtPassword.text.isEmpty
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...