Кнопка Отключить, если несколько текстовых полей пусты - PullRequest
1 голос
/ 16 мая 2019

У меня есть следующий код для отключения кнопки, пока текстовое поле пусто:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        let text = (textField.text! as NSString).replacingCharacters(in: range, with: string)

        if !text.isEmpty{
            addButton.isEnabled = true
        } else {
            addButton.isEnabled = false
        }
        return true
}

Работает нормально, но теперь, когда у меня есть 3 текстовых поля, я хочу, чтобы кнопка была включена, только если все текстовые поля не пусты. Пока, как только одно текстовое поле заполнено, кнопка активируется.

Как я могу настроить свой код для этого?

Ответы [ 3 ]

2 голосов
/ 16 мая 2019

Добавьте цель ко всем текстовым полям для события .editingChanged и проверьте, пусто ли какое-либо текстовое поле. Если все текстовые поля содержат текст, включите кнопку, иначе отключите кнопку.

class TestViewController: UIViewController, UITextFieldDelegate {    
    let addButton = UIButton()
    let textField1 = UITextField()
    let textField2 = UITextField()
    let textField3 = UITextField()

    override func viewDidLoad() {
        super.viewDidLoad()
        textField1.addTarget(self, action: #selector(textChanged(_:)), for: .editingChanged)
        textField2.addTarget(self, action: #selector(textChanged(_:)), for: .editingChanged)
        textField3.addTarget(self, action: #selector(textChanged(_:)), for: .editingChanged)
    }
    @objc func textChanged(_ textField: UITextField) {
        addButton.isEnabled = [textField1, textField2, textField3].contains { $0.text!.isEmpty }
    }
}
0 голосов
/ 16 мая 2019

Ну, я не думаю, что принятый ответ - элегантное решение этой проблемы. Я бы предложил добавить в ваш viewDidLoad следующий наблюдатель:

NotificationCenter.default.addObserver(self, selector: #selector(validate), name: UITextField.textDidChangeNotification, object: nil)

Затем определите селектор:

@objc func validate(){
    var filteredArray = [textFieldOne,textFieldTwo,textFieldThree,textFieldFour].filter { $0?.text == "" }
    if !filteredArray.isEmpty {
        button.isHidden = true
    } else {
        button.isHidden = false
    }
}
0 голосов
/ 16 мая 2019

Сначала вы должны создать выход для каждого текстового поля, и вы можете включить кнопку как,

        @IBAction func textFieldValueChanged(_ sender: Any)
        {

        if firstTextField.text != "" && secondTextField.text != "" && thirdTextField.text != ""  {
            addButton.isEnabled = true
        } else {
            addButton.isEnabled = false
        }
        return true

И соединить каждое текстовое поле с вышеуказанным действием для valueChanged событие

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